3

次のコードがありますが、このコード行に警告がx[i] = (rhs[i] - x[i - 1]) / b;あり、コンパイラはrhs[i]がガベージ値であることを通知しています。なぜそれが起こったのですか?そして、この警告を取り除く方法は?

double* getFirstControlPoints(double* rhs, const int n) {
    double *x;
    x = (double*)malloc(n * sizeof(double));
    double *tmp; // Temp workspace.
    tmp = (double*)malloc(n * sizeof(double));

    double b = 2.0;
    x[0] = rhs[0] / b;
    for (int i = 1; i < n; i++) // Decomposition and forward substitution.
    {
        tmp[i] = 1 / b;
        b = (i < n - 1 ? 4.0 : 3.5) - tmp[i];
        x[i] = (rhs[i] - x[i - 1]) / b; //The left operand of '-' is a garbage value
    }
    for (int i = 1; i < n; i++) {
        x[n - i - 1] -= tmp[n - i] * x[n - i]; // Backsubstitution.
    }
    free(tmp);
    return x;
}

ここに画像の説明を入力してください

ここに画像の説明を入力してください

スクリーンショットに表示される可能性のあるすべてのコンパイラの警告と呼び出しgetFirstControlPoints

4

2 に答える 2

1

このループ (333 行目) のため、配列に少なくとも4 つのポイントがあることを確認する必要があります。points

for (NSInteger i = 1 ; i < n - 1 ; ++i) {
    // initialisation stuff
}

n = 0, 1, 2 の場合はまったく実行されません。

その中に 3 つのオブジェクトがあると仮定しpointsます。311 行目で、n をカウント - 1 に設定します。n == 2

次に、ループ条件はi < 2 - 1iei < 1です。

ループ条件が必要だと思いますi < n

于 2012-08-22T14:32:01.897 に答える
0

points.count が 0 または 1 の場合、n が -1 または 0 であり、rhs[n-1]; にアクセスするため、いくつかの問題に直面しています。そして、n* バイトを malloc します。

多分それが問題かもしれません。コードにいくつかの範囲チェックを入れたことはありますか?

于 2012-08-22T13:10:46.383 に答える