2017-07-28 49 views
2

內存不足是Java和其他OO語言中最常見的錯誤之一。 我們是否可以應用靜態程序分析來減少「內存不足」錯誤? 我正在尋找旨在減少此錯誤而無需運行代碼的方法。 是否有任何特定的分析領域在這方面進行研究?使用靜態程序分析解決內存不足錯誤

回答

1

是的,靜態分析儀能夠檢測出界限。它們比動態分析器稍差,因爲它們無法追蹤指針使用情況的複雜情況。而且,靜態分析儀無法獲得一些信息。讓我們考慮一個抽象的情況:

void OutstandingIssue(const char *strCount) 
{ 
    unsigned nCount; 
    sscanf_s(strCount, "%u", &nCount); 

    int array[10]; 
    memset(array, 0, nCount * sizeof(int)); 
} 

無論數組索引越界發生與否,將取決於從外部接收的數據 。靜態代碼分析器在這裏是無能爲力的。在此可以做的最大限度是警告輸入的值沒有檢查就被使用。動態分析儀將在測試程序期間檢測錯誤,同時它將接收各種輸入數據。這些主題被給予here與更多細節。

但是,如果有一個問題「靜態分析儀真的有幫助嗎?」,答案是肯定的,確實如此。例如,由PVS-Studio團隊收集的一組錯誤包含由靜態分析器檢測到的很多這類錯誤:V512,V645

+0

這主要檢測與mem *函數有關的問題。 Java的編程語言呢? 你可以使用靜態分析來檢測潛在的Java內存不足代碼嗎? –

+0

我不使用Java,我不知道確切的答案。但我相信,使用SCA可以在Java中捕獲到類似的錯誤。 – AndreyKarpov

+0

你知道有這麼好的工具嗎? –

相關問題