C++ ***`./mypgm';中的错误:双重失效或损坏(输出):0x6f528c38***

C++ ***`./mypgm';中的错误:双重失效或损坏(输出):0x6f528c38***,c++,linux,raspbian,C++,Linux,Raspbian,我正在用树莓皮运行cpp程序。它在执行一段时间后显示错误而崩溃。 调试核心正在发出以下消息 [Thread debugging using libthread_db enabled] enter code hereUsing host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1". Core was generated by `./mypgm'. Program terminated with signal S

我正在用树莓皮运行cpp程序。它在执行一段时间后显示错误而崩溃。 调试核心正在发出以下消息

[Thread debugging using libthread_db enabled]
enter code hereUsing host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
Core was generated by `./mypgm'.
Program terminated with signal SIGABRT, Aborted.
#0  0x76a79f70 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt full
#0  0x76a79f70 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
        _sys_result = <optimized out>
        pd = 0x4baff430
        pid = <optimized out>
        selftid = 3853
#1  0x76a7b324 in __GI_abort () at abort.c:89
        save_stage = 2
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {
              1995550480, 1994166280, 1994170248, 0, 1991806976, 72, 1972443800, 0, 0, 1993493240, 
              1972528128, 1972445088, 0, 1972531088, 1994166280, 1994170248, 4294967277, 1269817120, 
              1993752896, 1993751604, 1972535816, 1993497000, 0, 1994055744, 4294967277, 1993498228, 
              1972529600, 1269817112, 7, 71, 71, 1269817112}}, sa_flags = 7, sa_restorer = 0x47}
        sigs = {__val = {32, 0 <repeats 31 times>}}
#2  0x76ab5954 in __libc_message (do_abort=<optimized out>, 
    fmt=0x76b6b6e8 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
        ap = {__ap = 0x4bafe04c}
        fd = 1
        on_2 = <optimized out>
        list = <optimized out>
        nlist = <optimized out>
        cp = <optimized out>
        written = <optimized out>
#3  0x76abbb80 in malloc_printerr (action=1, str=0x76b6b860 "double free or corruption (out)", 
    ptr=<optimized out>) at malloc.c:4996
        buf = "6f528c38"
        cp = <optimized out>
#4  0x76abcb24 in _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3840
        size = <optimized out>
        fb = <optimized out>
        nextchunk = <optimized out>
        nextsize = <optimized out>
        nextinuse = <optimized out>
        prevsize = <optimized out>
        bck = <optimized out>
        fwd = <optimized out>
        errstr = <optimized out>
        locked = <optimized out>
        __func__ = "_int_free"
#5  0x76d259a8 in sqlite3_free () from /usr/lib/arm-linux-gnueabihf/libsqlite3.so.0
No symbol table info available.
#6  0x76d5fe04 in ?? () from /usr/lib/arm-linux-gnueabihf/libsqlite3.so.0
No symbol table info available.
---Type <return> to continue, or q <return> to quit---
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
[启用使用libthread\u db的线程调试]
使用主机libthread_db library“/lib/arm-linux-gnueabihf/libthread_db.so.1”在此处输入代码。
核心由“./mypgm”生成。
程序以信号SIGABRT终止,中止。
#0 0x76a79f70英寸GI上升(信号=sig@entry=6)at../nptl/sysdeps/unix/sysv/linux/raise.c:56
56../nptl/sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录。
(gdb)英国电信全部
#0 0x76a79f70英寸GI上升(信号=sig@entry=6)at../nptl/sysdeps/unix/sysv/linux/raise.c:56
_系统结果=
pd=0x4baff430
pid=
selftid=3853
#1 0x76a7b324 in_uuugi_abort()位于abort.c:89
保存阶段=2
act={uuuu sigaction\u handler={sa\u handler=0x0,sa\u sigaction=0x0},sa\u mask={uuu val={
1995550480, 1994166280, 1994170248, 0, 1991806976, 72, 1972443800, 0, 0, 1993493240, 
1972528128, 1972445088, 0, 1972531088, 1994166280, 1994170248, 4294967277, 1269817120, 
1993752896, 1993751604, 1972535816, 1993497000, 0, 1994055744, 4294967277, 1993498228, 
1972529600、1269817112、7、71、71、1269817112},sau flags=7,sau restorer=0x47}
sigs={uuu val={32,0}
#2 0x76ab5954在uu libc_消息中(do_abort=,
fmt=0x76b6b6e8“***在../sysdeps/posix/libc_fatal.c:175处的“%s”中出现错误:%s:0x%s***\n”)
ap={uuuu ap=0x4bafe04c}
fd=1
关于_2=
列表=
nlist=
cp=
书面=
#3 malloc_printerr中的0x76abbb80(操作=1,str=0x76b6b860“双重释放或损坏(输出)”,
ptr=)在malloc.c:4996
buf=“6f528c38”
cp=
#在malloc.c:3840处有4个0x76abcb24 in _int_free(av=,p=,have_lock=0)
尺寸=
fb=
nextchunk=
下一个大小=
nextinuse=
prevsize=
bck=
fwd=
errstr=
锁定=
__func_uu=“\u int\u free”
#来自/usr/lib/arm-linux-gnueabihf/libsqlite3.so.0的sqlite3_-free()中的5 0x76d259a8
没有可用的符号表信息。
#6 0x76d5fe04英寸??()来自/usr/lib/arm-linux-gnueabihf/libsqlite3.so.0
没有可用的符号表信息。
---键入以继续,或键入q以退出---
反向跟踪停止:上一帧与此帧相同(堆栈损坏?)

我的代码运行了几个线程,sqlite3和raspberrypi的gpio库。

任何人都不可能从您编写的代码中找出问题所在。相反,你应该使用调试器,在查看代码时尝试跟踪错误。使用
-g
和禁用优化(
-O0
)构建一个调试版本,然后看看你是否可以让它也失败-这样你会得到更多线索。它是用-g-O编译的。。。netbeans中的“性能调试”选项。假设sqlite3没有两次释放内存,“双重释放或损坏(out)”的另一个选项是其他一些代码超出了范围并损坏了堆。在我的代码中,可能有多个线程正在访问数据库……我如何消除两次释放内存。