我正在和我的教授一起研究性能测量软件的使用,她建议我编写一个示例程序,只使用一些大循环来做一些函数调用和浮点计算,以便得到坚持下去。现在,它运行正常,直到它达到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;
}
答案 0 :(得分:2)
您正在使用无效索引访问bigArray
。
您只为bigArray分配了100个元素。 bigArray[i] = ...
是i&gt; = 100的未定义行为。在您的程序中,i
最多可达99999。