[解決済み] C - 構造体の解放
質問
例えば、次のような構造体があるとします。
typedef struct person{
char firstName[100], surName[51]
} PERSON;
で、mallocで領域を確保し、いくつかの値で埋めています。
PERSON *testPerson = (PERSON*) malloc(sizeof(PERSON));
strcpy(testPerson->firstName, "Jack");
strcpy(testPerson->surName, "Daniels");
その構造体によって占有されているすべてのメモリを解放するための、正しく安全な方法は何ですか?それとも、各構造体の属性を 1 つずつ解放する必要がありますか?
構造体はどのようにメモリに格納されるのでしょうか?構造体のアドレスを表示しようとすると、その最初の属性のアドレスと同じになってしまうという、奇妙な挙動に気づきました。
printf("Structure address %d == firstName address %d", testPerson, testPerson->firstName);
ということは、この free(testPerson) はこれと同じであるべきです free(testPerson->firstName)となります。
で、それは私がやりたいことではありません。
ありがとうございます
解決方法は?
簡単な答え
free(testPerson)
で十分です。
を使用できることを忘れないでください。
free()
を使用してメモリを確保したときのみ
malloc
,
calloc
または
realloc
.
この場合、メモリは
testPerson
ので、それを解放すれば十分です。
を使用した場合
char * firstname , *last surName
その場合、名前を格納するためにメモリを確保しなければならず、そのために各メンバーを個別に解放しなければなりませんでした。
つまり、要素に割り当てたメモリは後で使うということです。
free()
まず、オブジェクトへのポインタを解放します。
各要素を解放すると、以下のようなデモを見ることができます。
typedef struct Person
{
char * firstname , *last surName;
}Person;
Person *ptrobj =malloc(sizeof(Person)); // memory allocation for struct
ptrobj->firstname = malloc(n); // memory allocation for firstname
ptrobj->surName = malloc(m); // memory allocation for surName
.
. // do whatever you want
free(ptrobj->surName);
free(ptrobj->firstname);
free(ptrobj);
この背景には、もしあなたが
ptrobj
で確保されたメモリがリークします。
firstname
と
suName
のポインタを使用します。
関連
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】配列型char[]が代入できない [重複]。
-
[解決済み] ミュータブル構造体はなぜ "悪 "なのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】LEALアセンブリ命令は何をするのですか?
-
[解決済み] テスト
-
[解決済み] struct has no member named
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言