我有兩個指針有相同的地址。如果我釋放一個。我不應該使用第二個。因爲它的空閒內存但我可能會在下一個代碼中使用它。另外,如果我釋放一個我不能免費第二.Plz給我例如解決方案。我們如何解決雙重自由腐敗
-4
A
回答
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
相關問題
- 1. 雙重釋放或腐敗
- 2. 我該如何解決這個sphere()輸出的腐敗問題?
- 3. mxDestroyArray雙重釋放或腐敗
- 4. Gtest和Gmock - 雙重免費或腐敗
- 5. 雙重釋放或腐敗(上一個!)
- 6. 雙重釋放或腐敗(fasttop):
- 7. 雙重釋放或腐敗(fasttop)
- 8. realloc和自由原因「雙免費或腐敗」
- 9. 瞭解像這樣的「雙重釋放或腐敗」的錯誤
- 10. 如何避免雙重釋放或腐敗
- 11. 如何解決在C++中的flsgetvalue()堆腐敗?
- 12. 如何解決這個雙重編碼?
- 13. 雙重驗證錯誤,如何解決?
- 14. 如何解決FTP自我?
- 15. 解決雙重URL問題..?
- 16. 堆腐敗雙釋放內存
- 17. glibc檢測到雙免費或腐敗
- 18. 雙免費或腐敗的錯誤C++
- 19. 雙免費或腐敗(fasttop)錯誤
- 20. 雙免費或腐敗崩潰
- 21. 如何解決雙跳
- 22. 我們如何解決C4055警告?
- 23. 我們如何解決這種類型?
- 24. 錯誤:*** glibc的檢測到*** W5:雙重釋放或腐敗(fasttop):
- 25. 爲什麼雙重釋放或腐敗複製對象
- 26. 雙重釋放或刪除對象的腐敗(另一個...)
- 27. 雙重釋放或腐敗的C程序
- 28. 錯誤:雙重空閒或腐敗(出):0x00007fffffffddf0 ***
- 29. 雙重釋放或腐敗刪除對象
- 30. *** glibc的檢測***雙重釋放或腐敗(fasttop):
使用**共享指針**。 – WiSaGaN
不要釋放它兩次,只有在完成記憶時才釋放它。 – Paulpro
@WiSaGaN - 這是C. – detly