我有这个代码段,我打开/关闭文件多次(在一个循环中):
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)