在經歷了一些痛苦的經歷後,我明白了懸擺指針和雙重自由的問題。我正在尋求適當的解決方案搖晃指針和雙免費
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