当我尝试运行添加矩阵的程序时,我遇到了分段错误。我试图单独运行程序~1000次(同时计时每次运行并将结果写入文件)。
问题是,经过多次运行后我得到了分段错误 - 我得到多远取决于矩阵的大小。例如,如果我运行10x10矩阵(每个实例都有随机生成的数字),那么在1013次运行后我就会出现分段错误。对于100x100矩阵,我得到260次运行的段错误。
快速了解该计划的运作方式如下:
*此步骤似乎根据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]);
}
}
此代码重复运行,直到分段错误(每次读取的文件具有不同的数字)。如果您需要更多代码,请告诉我们。非常感谢任何帮助。
答案 0 :(得分:0)
有许多问题可能导致您发布的代码中出现分段错误。我列举一些:
fscanf
阅读,而不是构建自己的版本。答案 1 :(得分:0)
如何为矩阵分配内存?同样重要的是,你释放它吗?无论如何,提示:使用-g
选项编译程序以生成调试信息,并学习如何使用调试器。然后你会发现问题,而我们可以猜测。