エラーコードのスクリーンショットを投稿しました。
heights
出力
誰でも私を助けることができますか?
エラーコードのスクリーンショットを投稿しました。
heights
出力
誰でも私を助けることができますか?
静的アナライザーは_numberOfColumns
、ゼロ以外になる方法を認識していないため、ガベージが割り当てられていると主張していると思います。_numberOfColumns
が非ゼロになる手段を実際に提供していることを確認する必要があります。
通常、最大値または最小値を見つけたいループを書いているときは、サイズ変数を最大値 (最小値が必要な場合) または最小値 (最大値が必要な場合) に初期化します。これでほとんどが解決すると思います。あなたの問題の:
float shortestHeight = FLT_MAX;
for (unsigned i = 0; i < _numberOfColumns; i++)
{
// etc.
}
アナライザーは正しいです。が 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)
すると、アナライザーに正確にそれが伝えられます。