• 高翔slam14 project 出现double free or corruption (out)问题解决


    问题

    高翔slam project 0.3 在make的时候一切正常。但是在运行的时候会报错:double free or corruption (out)
    在用gdb调试的时候,可以知道调试信息:

    double free or corruption (out)
    
    Program received signal SIGABRT, Aborted.
    __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
    51	../sysdeps/unix/sysv/linux/raise.c: 没有那个文件或目录.
    (gdb) bt
    #0  0x00007ffff57d9e97 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
    #1  0x00007ffff57db801 in __GI_abort () at abort.c:79
    #2  0x00007ffff5824897 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff5951b9a "%s
    ")
        at ../sysdeps/posix/libc_fatal.c:181
    #3  0x00007ffff582b90a in malloc_printerr (str=str@entry=0x7ffff5953870 "double free or corruption (out)") at malloc.c:5350
    #4  0x00007ffff5832e75 in _int_free (have_lock=0, p=0x555555821f10, av=0x7ffff5b86c40 <main_arena>) at malloc.c:4278
    #5  0x00007ffff5832e75 in __GI___libc_free (mem=0x555555821f20) at malloc.c:3124
    #6  0x00007ffff50ecc4d in g2o::EdgeProjectP2MC_Intrinsics::~EdgeProjectP2MC_Intrinsics() () at /usr/local/lib/libg2o_types_sba.so
    #7  0x00007ffff557b1f7 in g2o::Factory::registerType(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, g2o::AbstractHyperGraphElementCreator*) () at /usr/local/lib/libg2o_core.so
    #8  0x00007ffff50e4b1a in _GLOBAL__sub_I_types_sba.cpp () at /usr/local/lib/libg2o_types_sba.so
    #9  0x00007ffff7de5733 in call_init (env=0x7fffffffdc60, argv=0x7fffffffdc48, argc=2, l=<optimized out>) at dl-init.c:72
    #10 0x00007ffff7de5733 in _dl_init (main_map=0x7ffff7ffe170, argc=2, argv=0x7fffffffdc48, env=0x7fffffffdc60) at dl-init.c:119
    #11 0x00007ffff7dd60ca in _dl_start_user () at /lib64/ld-linux-x86-64.so.2
    #12 0x0000000000000002 in  ()
    #13 0x00007fffffffe01a in  ()
    #14 0x00007fffffffe060 in  ()
    #15 0x0000000000000000 in  ()
    

    刚开始以为是g2o的问题,所以一直在搜索。

    解决

    就在高翔slam的gihub网址上看到了解决方案:link
    set( CMAKE_CXX_FLAGS "-std=c++11 -march=native -O3" )改成set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )
    就删掉了一个-march=native然后重新编译,居然就可以运行了 。

    资料查阅

    可是据我所知-march=native应该是一个指定目标程序的cpu架构来进行程序优化。native就是相当于自检测cpu。总之-march是gcc优化选项。
    具体参考:link

    我查阅到gcc官网记录了这个bug:Bug c/70136
    不过环境不一样,我的机器是:

    Intel i7 6700k
    ubuntu 18.04
    gcc 5.5

    具体原因后期再看,不过应该是环境的原因,和代码没关系。

    5.6更新

    貌似只要加了-march=native
    所有的节点与边的析构函数都会报错。

  • 相关阅读:
    poj 3320 Jessica's Reading Problem
    uva 120 C
    vim使用教程-转自
    2015 俄罗斯网络赛 D. Boulevard
    HTML转义字符大全
    介绍个好点的,JAVA技术群
    JAVA学习路线
    linux常用命令大全(转)好东西要分享
    Jqprint 轻量级页面打印插件
    hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/kidtic/p/14223679.html
Copyright © 2020-2023  润新知