编辑:要回答一些问题,这是经过修改但仍然无法正常工作的代码(大部分都在那里,但我应该明确指出我初始化了文件指针等)。同样,仅当我在 exp() 之前添加写入或完全删除 exp() 时才有效:
FILE *outfile;
char *outfilename;
outfilename = (char *)malloc(FILENAME_MAX*sizeof(char));
strcpy(outfilename, "outfile.txt");
outfile = fopen(realoutfilename, "w");
/* If this is uncommented, there isn't a segfault
if(realoutfile!=NULL && imoutfile!=NULL){
fprintf(outfile, "\r\n");
fseek(outfile,0,SEEK_SET);
}
*/
gauss = (double*) calloc(points, sizeof(double));
/* Maths and stuff */
if(outfile!=NULL){
for(i=0;i<points;i++){
/* this prints fine */
printf(outfile, "%g,\r\n", gauss[i]);
/* Seg fault is here */
fprintf(outfile, "%g,\r\n", gauss[i]);
}
}
fclose(outfile);
free(outfile);
我正在编译:
gcc main.c -lm -Wall -Wextra -Werror -Wshadow -g -o main
澄清一下,它没有到达函数的末尾 - 所以它不是崩溃的释放。崩溃是当它尝试在该 for 循环中写入文件时。
我已经检查过 exp() 没有上溢或下溢,正如我所说,我可以 printf 输出,但文件写入是禁止的。如果我尝试一个简单的调用,比如 exp(2),它也会失败。
gdb 回溯是(我对 gdb 不太熟悉,认为它可能会有所帮助):
#0 0xff15665c in _malloc_unlocked () from /lib/libc.so.1
#1 0xff15641c in malloc () from /lib/libc.so.1
#2 0xff1a8c80 in _findbuf () from /lib/libc.so.1
#3 0xff1a8f0c in _wrtchk () from /lib/libc.so.1
#4 0xff1ad834 in _fwrite_unlocked () from /lib/libc.so.1
#5 0xff1ad798 in fwrite () from /lib/libc.so.1
#6 0x000128ac in gaussian ()
#7 0x00010f78 in main ()
任何帮助将不胜感激!