2015-06-10 97 views
0

我有在下面的一段C++代碼的存儲器泄漏:C++內存泄漏 - 解釋分析

void onNewDepthSample(DepthNode node, DepthNode::NewSampleReceivedData data) 
{ 
    INT32 w, h; 
    FrameFormat_toResolution(data.captureConfiguration.frameFormat, &w, &h); 
    INT32 size = data.depthMap.size(); 

    int16_t* ptr = new int16_t[size]; 

     for (int i = 0; i < size; i++){ 
      ptr[i] = data.depthMap[i]; 
     } 

    depthCB(stringToCsharpString(node.getSerialNumber()), &w, &h, ptr); 
    delete[] ptr; 
} 

這種方法稱爲每秒30次。內存泄漏分析:

Function details 

Function DepthsenseDriver!malloc+49 
Source Line  
Allocation type Heap allocation(s) 
Heap handle 0xcf11e4ac 
Allocation Count 75256 allocation(s) 
Allocation Size 1,22 MBytes 
Leak Probability 100% 



Call stack sample 1 

Address 0x32335344 
Allocation Time 00:05:00 since tracking started 
Allocation Size 17 Bytes 


Call stack: 

DepthsenseDriver!malloc+49 
DepthsenseDriver!operator new+1d 
DepthsenseDriver!CreateFileW+96b  
DepthsenseDriver!DepthSense::FunctionHandler<DepthSense::DepthNode,DepthSense::DepthNode::NewSampleReceivedData>::operator()+5d 

我想知道我如何解釋這個分析。例如,有一個CreateFileW函數調用,但在我的代碼中,此函數調用不存在。

我是一個C++小白,所以每頭或改進都是歡迎的。

+0

什麼是「FrameFormat_toResolution」?你可以請添加更多的細節。看起來像這種類型有'operator()'重載,可能會期望一些清理或錯誤。 –

+0

它也可能是一個泄漏探測器的錯誤。嘗試一個載體,看看是否重現。 –

+0

您也可以使用valgrind或泄漏清潔劑仔細檢查。但我不明白你爲什麼認爲泄漏是在泄漏報告中沒有看到的這個功能。我會建議函數CreateFileW – Brahim

回答

0

使用Deleaker,我發現這是造成泄漏的stringToCsharpString方法。