在经历了一些痛苦的经历后,我明白了悬摆指针和双重自由的问题。我正在寻求适当的解决方案摇晃指针和双免费
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;
}
}
做上述仅当free_aStruct(A);
被称为设置A = NULL
。 B
现在悬停。
这种情况如何避免/补救?是参考数字唯一可行的解决方案?或者,有没有其他的“防御性”方法来释放内存,以防止free_aStruct(B);
爆炸?
转移到Java的最好的事情之一是,当我做了这整个CLASS的关注 - 我曾经每天必须处理的事情,完全消失。 – 2010-04-01 20:21:55
@Bill如果您编写包含它们的代码,则只需处理这些问题。 – 2010-04-01 20:30:40
实质上,你在问:“如果我编写不好的代码,是否可以防止由于我的错误代码而发生不好的事情?”。我不认为有任何形式的答案涉及阳光,光线,小马和兔子。 – 2010-04-01 20:44:14