使用大循环的测试程序似乎中途徘徊

时间:2014-07-02 21:41:00

标签: c++ loops hang

我正在和我的教授一起研究性能测量软件的使用,她建议我编写一个示例程序,只使用一些大循环来做一些函数调用和浮点计算,以便得到坚持下去。现在,它运行正常,直到它达到i = 110,j = 99000,此时它停止打印,似乎挂起或暂停操作。我尝试过使用fflush(stdout),但它并没有什么区别。你对可能导致这种情况的原因有什么看法吗? (只需从命令行正常运行;使用的编译器是g ++。)

#include <iostream>

double arrayFill(double a, double b){
     double c = (a+.5)*(b+.5);
     return c;
}

double bigLoop(double val){
    for (int i = 0; i < 20; ++i){
        for (int j = 0; j < 20; ++j){
            val += .5;
        }
    }
    return val;
}

int main(int argc, char* argv[]){

    double **bigArray = new double*[100];

    for (int i = 0; i < 100000; ++i){

        bigArray[i] = new double[10];

        for (int j = 0; j < 100000; ++j){
            double x = (double) i/1000;
            double y = (double) j/1000;
            bigArray[i%100][j%10]=arrayFill(x, y);
            bigArray[i%100][j%10]=bigLoop(bigArray[i%100][j%10]);
            if (j%1000 == 0){
                std::cout << bigArray[i%100][j%10] << std::endl;
                std::cout << "i = " << i << std::endl;
                std::cout << "j = " << j << std::endl;
                fflush( stdout );
            }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您正在使用无效索引访问bigArray

您只为bigArray分配了100个元素。 bigArray[i] = ...是i&gt; = 100的未定义行为。在您的程序中,i最多可达99999。