2010-08-10 27 views
2

有沒有一種方法可以像靜態分析工具一樣檢測簡單的內存泄漏?我無法更改代碼以包含運行時內存泄漏檢測中使用的tipical包含(struc1是包含某些字段的簡單結構)。視覺工作室的靜態代碼內存泄漏檢測vC++

void noRelease(void) 
{ 
    struc1 *memoryLeak; 

    memoryLeak = (struc1 *) malloc(sizeof struc1); 
    if (NULL != memoryLeak) 
    { 
     memoryLeak->a=3; 
    } 
} 

VSTS(Visual Studio Team System)檢測到由於異常導致的內存泄漏,但無法看到這個簡單的泄漏。

任何想法都會非常有幫助。 非常感謝。

+0

沒人會永遠這樣寫代碼。你*可以*寫這樣的代碼並不意味着有人會發現編寫一個工具來檢測它是有益的。這不是有利可圖的。 – 2010-08-10 16:48:09

+0

@Hans:當然,幾乎沒有人會寫這樣的代碼。這只是一個概念證明。如果一個工具無法檢測到這個,當然它不會檢測到更難的泄漏。 – 2010-08-11 07:00:36

+0

@Hans - 問題是大量的人寫了類似的代碼,並且像這樣的代碼太多,但遺憾的是仍然在浮動。 – 2010-08-16 17:21:36

回答

1

嗯...... Coverity可以做到這一點,但你必須出售你的房子來支付它。 我曾經寫過一個靜態分析器,用於檢查給定函數作用域中是否調用了一對函數。我使用了一個靜態分析API,它帶有一個由scitools製作的名爲「Understanding 4 C++」的程序。 www.scitools.com 我用一個managed API(我寫的)編寫了搜索器/ scrutinzer,它包裝了他們的C API。注意:然而,理解4 C++不是免費的。

不管怎樣,我寫的這個工具會在上面的代碼中檢測到缺少空閒。它並不比這更聰明。如果指針在別處被釋放,它就不會找到它。

+0

好的,Coverity看起來是唯一的解決方案......謝謝。 – 2010-08-16 14:39:53