gpt4 book ai didi

C - 指数函数导致文件 IO 出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:01 24 4
gpt4 key购买 nike

编辑:为了回答一些问题,这是经过修改但仍然无法正常工作的代码(其中大部分是从那里开始的,但我应该明确表示我初始化了文件指针等)。同样,仅当我在 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() 没有溢出或下溢,正如我所说,我可以打印输出,但文件写入是不行的。如果我尝试一个简单的调用,比如 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 ()

如有任何帮助,我们将不胜感激!

最佳答案

问题出在这里:

outfilename = (char *)malloc(FILENAME_MAX*sizeof(char));
outfilename = "file.txt";

你不能像那样分配一个字符串,你必须使用strcpy:

strcpy(outfilename, "file.txt");

发生的事情是您正在用字符串赋值覆盖 outfilename 指针。然后你尝试释放它 free(outfilename);。由于您正在释放字符串文字,因此行为未定义,因此您会遇到崩溃。

至于为什么它在一种情况下崩溃而在另一种情况下不崩溃。该行为是未定义的,因此允许发生任何事情。有可能您的指数函数代码对堆栈/堆做了一些可能导致它崩溃/不崩溃的事情。

编辑: 我希望这只是一个拼写错误或复制错误,但我也看不到 outfile 的初始化位置。如果它真的从未被初始化,那就是另一个错误。 (很可能是导致您的特定段错误的那个)

所以它应该是这样的:

FILE *outfile;
outfilename = (char *)malloc(FILENAME_MAX*sizeof(char));
strcpy(outfilename, "file.txt");

outfile = fopen(outfilename, "w");
if (outfile == NULL){
// Error, file cannot be openned.
}

关于C - 指数函数导致文件 IO 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com