簡體   English   中英

不使用free()malloc的警告

[英]warning for not using free() malloc

GCC內置了哪些安全措施來檢查內存泄漏? 如果是這樣,我該如何使用它們? 當我使用“gcc -Wall -o run run.c”進行編譯時,編譯器似乎並不關心在代碼末尾是否釋放了任何已分配的堆空間。 我在Google上找不到任何簡單的修復方法。

非常感謝你的時間。

編輯:谷歌搜索確實指向Valgrind和其他工具。 但我很好奇為什么編譯器無法解決這個問題。 作為一個新手,檢查每個“malloc”是否具有與之關聯的“免費”似乎是一項非常簡單的任務。

有兩種方法可以分析問題的代碼 - 靜態分析和運行時分析。 靜態分析讀取代碼 - 這是編譯器真正做得很好的。 代碼問題的運行時分析發生在代碼鏈接到另一組庫時,這些庫可以看到代碼在監視下運行時實際執行的操作。 查找內存泄漏對於靜態分析很困難,但對於運行時分析包則不然。

其他運行時分析就像代碼覆蓋一樣 - 代碼的所有部分都運行了嗎? gcov這樣做,就像valgrind和電柵欄一樣尋找泄漏等記憶問題。

所以,不,沒有真正好的編譯器保護措施來測試內存泄漏。

-fsanitize=leak GCC標志。

它會覆蓋malloc / calloc / free以使它們計數分配並釋放內存塊。
如果使用此標志編譯程序,則會在執行后將有關檢測到的泄漏的信息打印到終端。

你可以在這里這里閱讀它。


此外,我從未使用它,所以這個答案完全基於GCC手冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM