Я проводил некоторые исследования с моим профессором по использованию программного обеспечения для измерения производительности, и она порекомендовала мне написать пример программы, которая просто использует несколько больших циклов для выполнения некоторых вызовов функций и вычислений с плавающей запятой, чтобы освоить ее. Прямо сейчас, он работает нормально, пока не достигнет 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;
}
Вы получаете доступ bigArray
с неверным индексом.
Вы выделяете только 100 элементов для bigArray. bigArray[i] = ...
является неопределенным поведением для i> = 100. И в вашей программе, i
идет до 99999.