2011-03-24 24 views
1
int main (int argc, char * const argv[]) 
{ 
    int *num = new int[100] ; 
    return 0; 
} 

在上面的程序中,有defintely 內存泄漏。但是,當運行 - >與性能工具運行 - >泄漏,給出下圖顯示沒有泄漏的對象。我錯過了什麼?性能工具僅適用於目標C環境?C++程序與性能比較工具 - 泄漏

Image

編輯:

上的MSVC++ 2010,很容易檢測泄漏上調試模式下運行,同時 -

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 

int main (int argc, char * const argv[]) 
{ 
    int *num = new int[100] ; 

    _CrtDumpMemoryLeaks(); // Looking for something equivalent to this 
          // that lets me know whether the program has 
          // memory leaks on an XCode environment. 

    return 0; 
} 
+0

您正在使用完全優化版本運行嗎? – Naveen 2011-03-24 04:54:41

+0

@Naveen - 我在調試模式下運行,但不確定*完全優化*。將檢查它。 – Mahesh 2011-03-24 04:57:35

+0

@Naveen - 優化級別 - >無。 – Mahesh 2011-03-24 05:03:27

回答

2

leaks不執行後未被釋放的塊的屍體轉儲。

相反,它會在運行過程中分析進程並查找不再可訪問的已分配塊。它根據需要或每10秒掃描一次。

程序更改爲類似如下:

int main (int argc, char * const argv[]) 
{ 
    int *num = new int[100] ; 
    char c; 

    puts("memory allocated\npress a key to continue...\n"); 
    c = getchar(); 

    num = NULL; // leak the allocation 

    puts("memory has been leaked\npress a key to continue...\n"); 
    c = getchar(); 

    return 0; 
} 

如果你有掃描發生,而程序正在等待第二個按鍵就應該檢測泄漏。

+0

是否有這樣的xcode相當於vs C++ 2010. http://msdn.microsoft。 com/en-us/library/x98tx3cf.aspx – Mahesh 2011-03-24 07:21:20

+0

@Mahesh:你可以試試Wu Yongwei的開源調試分配器:http://wyw.dcweb.cn/leakage.htm - 我沒有試過,所以不能擔保,但文章表明瞭很多想法已經進入它。 – 2011-03-25 06:46:35