Я делаю программу для проверки производительности запуска нескольких потоков против одного потока. В этой программе я сталкиваюсь с ошибкой сегментации в строке 26, которая говорит: dataArray[i] = 0;
Я прокомментировал ниже, в какой строке указана ошибка. Причина, по которой я знаю, что это за строка, заключается в том, что я поместил свой код в отладчик.
вот полный код:
#include<iostream>
#include <fstream>
using namespace std;
// your custom calculation done on each index of the array
inline int calcValue(int index)
{
return index * 2 + 1;
}
int main(int argc, char *argv[])
{
const int N = 1000000;
int *dataArray = new int[N];
double timearray[100];
ofstream myfile;
myfile.open("data.csv");
for(int a=0; a<100; a++)
{
// init array
for(int i=0;i<N;i++)
dataArray[i] = 0;//error is here
// traverse array and measure time
struct timespec start, stop;
//save start time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
for(int i=0;i<N;i++)
dataArray[i] = calcValue(i);
//save end time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop);
// calc elapsed time
double cpuTime = (stop.tv_sec - start.tv_sec) * 1e6 + (stop.tv_nsec - start.tv_nsec) / 1e3; // in micros
timearray[a]=cpuTime;
// report results
cout<<"Start verify Calculation..."<<endl;
for(int i=0;i<N;i++)
{
if(calcValue(i)!=dataArray[i])
{
cout<<"Bad value "<<dataArray[i]<<" at position "<<i<<endl;
break;
}
}
cout<<"End verify calculation"<<endl;
cout<<"CPU time micro: "<<cpuTime<<endl;
// cleanup
delete []dataArray;
}
for(int i=0; i<100; i++){
myfile <<timearray[i]<<endl;
}
}