いくつかのつらい経験を経て、ダングリング ポインターとダブル フリーの問題が理解できました。私は適切な解決策を求めています。
aStruct
他の配列を含むいくつかのフィールドがあります。
aStruct *A = NULL, *B = NULL;
A = (aStruct*) calloc(1, sizeof(sStruct));
B = A;
free_aStruct(A);
...
// Bunch of other code in various places.
...
free_aStruct(B);
正常に終了するfree_aStruct(X)
ように書く方法はありますか?free_aStruct(B)
void free_aStruct(aStruct *X) {
if (X ! = NULL) {
if (X->a != NULL) { free(X->a); x->a = NULL; }
free(X); X = NULL;
}
}
上記を実行すると、が呼び出されたA = NULL
ときにのみ設定されます。がぶら下がっています。free_aStruct(A);
B
この状況をどのように回避/改善できますか? 参照カウントは唯一の実行可能な解決策ですか? free_aStruct(B);
または、爆発を防ぐために、メモリを解放するための他の「防御的な」アプローチはありますか?