簡體   English   中英

在C程序中查找內存泄漏的最佳方法

[英]Best way to find memory leaks in a C program

我正在嘗試完成大學任務,標記標准指定內存管理的5% - 特別是沒有內存泄漏。

據我所知,簡單的C程序中的內存泄漏只是由程序放棄的指針引起的 - 即,malloc / calloc / etc調用從來沒有相應的free

我的問題分為三部分:

  1. 什么是Solaris和OSX最簡單的方法來“證明”你沒有泄露任何內存?
  2. XCode是否有任何工具可以幫助確定內存泄漏?
  3. 一旦進程結束,操作系統是否在ac程序中釋放所有先前分配的內存?

Valgrind是你的朋友。

  1. 對於每個malloc(),您需要確保只有一個free()。
  2. 我沒有使用過XCode,但是這個論壇條目可能有所幫助。
  3. 是。 然而,讓你的運行程序“泄漏”仍然是糟糕的形式。

一般來說,如果不使用像內存調試器這樣的工具(早期),學習如何避免泄漏是個好主意 - 特別是對於簡單的程序。 然而,這很痛苦:當談到構建任何非平凡的事情時,你會想要開始學習如何使用更高級的調試工具(如Valgrind ,正如Alex Reynolds在另一個答案中所建議的那樣)。

Mac OS的答案和一個要避免的例子(保存半小時)。


Mac OS沒有附帶Valgrind或dmalloc。 此外,Valgrind在嘗試將其安裝在Sierra時存在一些兼容性問題。

有一個叫做“泄漏”的實用程序,我通過它運行它:

leaks -atExit --/Contents/Developer/usr/lib/libLeaksAtExit.dylib ./a.out

不幸的是,這並沒有報告明顯的內存泄漏 ...也許我使用它錯了,但我只是在尋找一種簡單的方法來檢查我的C程序是否應該釋放它的內存。

如果你有時間,那么可以 在命令行上閱讀並使用OSX Leaks for C Programs?

資源:

  1. 發現內存泄漏
  2. 在C / C ++可執行文件上使用“leaks”命令

PS:也許如果與“iprofiler”一起使用,那么它可能會有用,但我沒有安裝它。

還有dmalloc

暫無
暫無

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

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