2013-08-16 19 views
-4

我有兩個指針有相同的地址。如果我釋放一個。我不應該使用第二個。因爲它的空閒內存但我可能會在下一個代碼中使用它。另外,如果我釋放一個我不能免費第二.Plz給我例如解決方案。我們如何解決雙重自由腐敗

+0

使用**共享指針**。 – WiSaGaN

+1

不要釋放它兩次,只有在完成記憶時才釋放它。 – Paulpro

+1

@WiSaGaN - 這是C. – detly

回答

1

這個想法是,當你釋放兩個指針之一,然後設置爲NULL。另外,在使用它之前總是測試一個指針是一個很好的編程習慣。

char *ptr1 = malloc(80); 

char *ptr2 = ptr1; 

free(ptr2); 
ptr1 = ptr2 = NULL; 
// other stuff happens here, and if the code doesn't "know" 
// that ptr1 is set correctly then... 
if (ptr1 != NULL) 
{ // etc. 

} 

希望這是你問的,並希望它有幫助。好運與你未來的編碼努力。

+0

良好的編程習慣?!像「if(ptr1!= NULL)」這樣的測試會使用與內容無關的樣板來填充代碼,這與程序的意圖無關。如果你要在使用它之前檢查每個指針,使用一種內存安全的編程語言,它會更有效率(編譯器只會根據更高級別的不變量插入它知道必要的檢查),源代碼將會更具可讀性。 –

+0

@PascalCuoq,如果使用c你應該檢查指針。我會編輯我的答案,使其更現實一些。 – JackCColeman