Я получаю ошибку сегментации, когда пытаюсь запустить свою программу, которая выполняет добавление матрицы.Я пытаюсь запустить программу отдельно ~ 1000 раз (во время каждого запуска и записи результата в файл).
Проблема в том, что я получаю ошибку сегментации после нескольких запусков - насколько далеко я получаю, зависит от размера матрицы.Например, если я запускаю матрицу 10x10 (каждый экземпляр имеет случайно сгенерированные числа), я получаю ошибку сегментации после ровно 1013 прогонов.Для матрицы 100x100 я получаю segfault при 260 пробегах.
Краткий обзор работы программы выглядит следующим образом:
- Числа генерируются случайным образом и записываются в файл в зависимости от введенного ввода (10x10, 100x100)
- Числа считываются из файла и отправляются в CUDA *
- CUDA вычисляет результаты и записывает их в файл результатов (а также время, затрачиваемое на вычисление, и записывает его в другой файл)
* Похоже, что этот шаг вызывает ошибку сегментации в соответствии с отладчиком GDB.Ниже выводится ошибка отладчика и функция, которая вызывает ошибку.
>Program terminated with signal 11, Segmentation fault.
#0 0x0000000000402f4c in readFromFile(int, char, int&, int&, float*) ()
Вот фактическая функция:
void readFromFile(int fd, char byte, int &matrixWidth, int &matrixHeight,float *matrix)
{
int tokenIndex = 0;
char *token = (char*) malloc(500);
int matrixIndex = 0;
while(read(fd,&byte,1)){
if(isdigit(byte)||byte=='.'){
token[tokenIndex]=byte;
tokenIndex++;
}
else if(byte==' ' && matrixHeight==0){
matrixWidth++;
token[tokenIndex]='\0';
matrix[matrixIndex]=atof(token);
//printf("Stored: %d\n",matrixOne[matrixIndex]);
tokenIndex=0;
matrixIndex++;
}
else if(byte=='\n'){
matrixHeight++;
if(tokenIndex!=0){
token[tokenIndex]='\0';
matrix[matrixIndex]=atof(token);
//printf("Stored: %d\n",matrixOne[matrixIndex]);
tokenIndex=0;
matrixIndex++;
}
}
else if(byte==' ' && matrixHeight!=0){
token[tokenIndex]='\0';
matrix[matrixIndex]=atof(token);
tokenIndex=0;
matrixIndex++;
}
//printf("Token: %s, number matrix: %f\n" , token, matrix[matrixIndex-1]);
}
}
Этот код многократно запускается до сбоя сегментации (каждый раз, когда файл, который он читает, имеет разные номера).Если вам нужно больше кода, просто дайте мне знать.Любая помощь будет принята с благодарностью.