Тестовая программа, использующая большой цикл, кажется, зависает на полпути

Я проводил некоторые исследования с моим профессором по использованию программного обеспечения для измерения производительности, и она порекомендовала мне написать пример программы, которая просто использует несколько больших циклов для выполнения некоторых вызовов функций и вычислений с плавающей запятой, чтобы освоить ее. Прямо сейчас, он работает нормально, пока не достигнет 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

Решение

Вы получаете доступ bigArray с неверным индексом.

Вы выделяете только 100 элементов для bigArray. bigArray[i] = ... является неопределенным поведением для i> = 100. И в вашей программе, i идет до 99999.

2

Другие решения


По вопросам рекламы [email protected]