5

エラーコードのスクリーンショットを投稿しました。 ここに画像の説明を入力

heights出力

ここに画像の説明を入力

誰でも私を助けることができますか?

4

2 に答える 2

3

静的アナライザーは_numberOfColumns、ゼロ以外になる方法を認識していないため、ガベージが割り当てられていると主張していると思います。_numberOfColumnsが非ゼロになる手段を実際に提供していることを確認する必要があります。

通常、最大値または最小値を見つけたいループを書いているときは、サイズ変数を最大値 (最小値が必要な場合) または最小値 (最大値が必要な場合) に初期化します。これでほとんどが解決すると思います。あなたの問題の:

float shortestHeight = FLT_MAX;
for (unsigned i = 0; i < _numberOfColumns; i++)
{
    // etc.
}
于 2013-03-14T10:47:09.080 に答える
2

アナライザーは正しいです。が 0 の場合、コードはガベージ メモリにアクセスする_numberOfColumnsため、 に 0 バイトが割り当てられheights、ガベージが作成されheights[0]ます。アナライザーはどのような値_numberOfColumnsを持つことができるかを知りませんが、 を使用して知ることができますassert(_numberOfColumns>0)

たとえば、次の C プログラムを見てください。

int main(int argc, const char * argv[])
{
    int n = argc-1;
    int *a = malloc(n*sizeof(int));
    for (int i=0; i<n; i++) {
        a[i] = i;
    }
    int foo = a[0];
    free(a);
    return foo;
}

のサイズはa、引数の数によって決まります。引数がない場合n == 0。プログラム (またはプログラムのその部分) が常に 0 より大きい値を に代入することが確実な場合はa、アサーションを使用できます。追加assert(n>0)すると、アナライザーに正確にそれが伝えられます。

于 2013-03-14T10:32:57.660 に答える