0

私のコード:

#define RUNS 4

int main (int argc, char *argv[])
{
    srand(time(NULL));

    int i;
    int _length;
    float _totalTimeToReachLength;
    float _arrayOfTimes[RUNS - 1];
    float _sumDev = 0.0;

    for (i = 0; i < RUNS; i++)
    {
        float localHopNumber = GenerateHops(_length); //pass length into hops method.

        _arrayOfTimes[i] = localHopNumber; //add hop number generated to array.
        _sumDev = (_sumDev + (_arrayOfTimes[i]-(_totalTimeToReachLength / RUNS)) * (_arrayOfTimes[i]-(_totalTimeToReachLength / RUNS))); //work out sd.
        _totalTimeToReachLength = _totalTimeToReachLength + _arrayOfTimes[i];

        printf("Current increment for average: %f\n", _totalTimeToReachLength);
        printf("Item added to array: %f\n", _arrayOfTimes[i]);
    }

    printf("The standard deviation of times is: %f\n", sqrt(_sumDev/RUNS));
    printf("The standard average of times is: %f\n", _totalTimeToReachLength / RUNS);

    return 0;
}

最後のループでめちゃくちゃになるのはなぜですか?

4

3 に答える 3

5

配列宣言は次のようにする必要があります。

float _arrayOfTimes[RUNS];

OP using のRUNS-1宣言は、それを 3 つの要素の配列として宣言します (ただし、4 つの値を格納しています)。

于 2012-10-23T22:09:45.193 に答える
1

arrayOfTimes3 つのフロートで宣言しました。しかし、あなたのループでは、最大 4 にアクセスしています。したがって、未定義の動作を呼び出します。

条件を次のように変更します。 for (i = 0; i < RUNS -1; i++)

またはfloat _arrayOfTimes[RUNS-1];_float _arrayOfTimes[RUNS];

于 2012-10-23T22:10:19.693 に答える
0

_arrayOfTimes をオーバーランしています。3 つの要素で宣言しますが、要素 4 に割り当てます。

float _arrayOfTimes[RUNS - 1];  

_arrayOfTimes[i] = localHopNumber;
于 2012-10-23T22:12:03.817 に答える