РЕДАКТИРОВАТЬ: Чтобы ответить на некоторые вопросы, это пересмотренный и до сих пор не работает код (большая часть была там с самого начала, но я должен был четко указать, что я инициализировал указатель файла и т. Д.).Опять же, работает, только если я добавляю запись перед 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 ()
Любая помощь будет принята с благодарностью!