加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么在这里得到SIGABRT?

发布时间:2020-12-16 05:55:55 所属栏目:百科 来源:网络整理
导读:我有这个代码段,我打开/关闭文件多次(在一个循环中): for(i=1;imax;i++) { /* other code */ plot_file=fopen("all_fitness.out","w"); for (j=0;jpop_size;j++) fprintf(plot_file,"%lf %lfn",oldpop[i].xreal[0],oldpop[i].obj); fclose(plot_file); /*o
我有这个代码段,我打开/关闭文件多次(在一个循环中):
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 %lfn",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)

解决方法

当你调用fclose()时,glibc释放一些动态分配的结构;内部有一个free()调用. malloc()和free()依赖于相当复杂,动态构建的结构.显然,glibc发现结构处于非相干状态,直到安全记忆释放不能完成. glibc决定,问题严重到足以保证立即中止.

这意味着您的代码中有某个错误,可能与您显示的代码段相当远,缓冲区溢出或类似的不合适的内存写操作会损坏内存分配结构.

您可能想尝试Valgrind或Electric Fence排序这些问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读