получить ошибку сегментации не знаю, как это исправить, я знаю, где это - PullRequest
1 голос
/ 06 апреля 2020

Я делаю программу для проверки производительности запуска нескольких потоков против одного потока. В этой программе я сталкиваюсь с ошибкой сегментации в строке 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;
  }
}
...