У меня есть этот фрагмент кода, в котором я открываю/закрытия файла несколько раз (в цикле):Почему я здесь получаю SIGABRT?
for(i=1;i<max;i++)
{
/* other code */
plot_file=fopen("all_fitness.out","w");
for (j=0;j<pop_size;j++)
fprintf(plot_file, "%lf %lf\n",oldpop[i].xreal[0],oldpop[i].obj);
fclose(plot_file);
/*other code*/
}
Я получаю SIGABRT здесь, со следующей трассировку:
#0 0x001fc422 in __kernel_vsyscall()
#1 0x002274d1 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2 0x0022a932 in *__GI_abort() at abort.c:92
#3 0x0025dee5 in __libc_message (do_abort=2, fmt=0x321578 "*** glibc detected *** %s: %s: 0x%s ***\n")
at ../sysdeps/unix/sysv/linux/libc_fatal.c:189
#4 0x00267ff1 in malloc_printerr (action=<value optimized out>, str=0x6 <Address 0x6 out of bounds>, ptr=0x8055a60) at malloc.c:6217
#5 0x002696f2 in _int_free (av=<value optimized out>, p=<value optimized out>) at malloc.c:4750
#6 0x0026c7cd in *__GI___libc_free (mem=0x8055a60) at malloc.c:3716
#7 0x0025850a in _IO_new_fclose (fp=0x8055a60) at iofclose.c:88
#8 0x0804b9c0 in main() at ga.c:1100
Номер строки 1100, это строка, в которой я делаю fclose()
в вышеуказанном сегменте кода. В чем причина такого поведения? Любые указатели приветствуются.
(я на Linux и с помощью GCC)
Вы используете один и тот же i в обоих ваших циклах, это намеренно? – IVlad
@IVlad: Спасибо, что указали это. Это была ошибка в публикации вопроса. Починил это. – 2010-02-25 13:52:40
Что такое сообщение malloc_printerr? Вы уверены, что fclose() вызывает сбой? Я думаю, вы должны уменьшить свой код до той части, которая вызывает проблему, и опубликовать ее ... – IVlad