经过一些痛苦的经历,我明白了悬空指针和双重释放的问题。我正在寻求适当的解决方案。
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);
爆炸?