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

您已经声明arrayOfTimes了 3 个浮点数。但是在您的循环中,您最多可以访问 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 回答