2017-07-28 15 views
2

メモリ不足は、Javaおよび他のOO言語で最も頻繁に発生するエラーの1つです。 "メモリ不足"エラーを減らすために静的プログラム解析を適用できますか? 私はコードを実行せずにこのエラーを減らすことを目指すアプローチを探しています。 これに関する研究を行う特定の分析分野はありますか?静的プログラム解析を使用してメモリ不足エラーを解決する

答えて

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チームによって収集されたバグの集合には、スタティックアナライザによって検出されたこのタイプのエラーの数が含まれています(V512V645)。

+0

これは主にmem *関数に関連する問題を検出します。 Javaのようなプログラミング言語はどうですか? Javaのメモリ不足コードを検出する静的解析を使用して何かできますか? –

+0

私はJavaでは動作しません。正確な答えはわかりません。しかし、SCAを使ってJavaで同様のエラーが発生することは確かです。 – AndreyKarpov

+0

あなたはそれを行う良いツールを知っていますか? –

関連する問題