【问题标题】:C++ realloc() : invalid pointerC++ realloc():无效指针
【发布时间】:2016-04-19 17:45:26
【问题描述】:

我正在做一个项目,但我遇到了一个我不知道如何处理的问题。

我编译项目时没有问题,但是在执行时,我什至无法进入main()函数......在进入main()之前它崩溃了。这是堆栈:

#0  0x00007ffff2859cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007ffff285d0d8 in __GI_abort () at abort.c:89
#2  0x00007ffff2896394 in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7ffff29a4b28 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3  0x00007ffff28a10f7 in malloc_printerr (action=<optimized out>, str=0x7ffff29a0d5d "realloc(): invalid pointer", ptr=<optimized out>) at malloc.c:4996
#4  0x00007ffff28a6192 in __GI___libc_realloc (oldmem=0x7ffff58fb840 <QListData::shared_null>, bytes=32) at malloc.c:2986
#5  0x00007ffff31f5e3e in QListData::realloc(int) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007ffff31f5efa in QListData::append(int) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007ffff32e2d8c in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007ffff32dee29 in qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#9  0x00007ffff3181eb3 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007ffff7dea13a in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffdfc8, env=env@entry=0x7fffffffdfd8) at dl-init.c:78
#11 0x00007ffff7dea223 in call_init (env=<optimized out>, argv=<optimized out>, argc=<optimized out>, l=<optimized out>) at dl-init.c:36
#12 _dl_init (main_map=0x7ffff7ffe1c8, argc=1, argv=0x7fffffffdfc8, env=0x7fffffffdfd8) at dl-init.c:126
#13 0x00007ffff7ddb30a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#14 0x0000000000000001 in ?? ()
#15 0x00007fffffffe32c in ?? ()
#16 0x0000000000000000 in ?? ()

我已经测试了一些东西:使用Qt5(更具体地说是Qt5Widgets)创建一个小程序,没有问题(无论是在编译还是执行时)... 我将 gcc 和 g++ 升级到 4.9 版。 还从所有我们不使用的依赖项中清除了代码,但没有任何进展的迹象..

最奇怪的是,我的队友都没有遇到这个问题,而当我从 Windows 的 Virtual box 中使用 Ubuntu 时,甚至没有出现这个问题。

我正在开发 Linux Mint 17.3 Rosa。

【问题讨论】:

  • 你能至少显示来自dl_init.ccall_init()吗?
  • @MichaelBurr 这几乎肯定是 glibc 内部的。加载动态库时,qt 似乎搞砸了。 sourceware.org/git/?p=glibc.git;a=blob_plain;f=elf/dl-init.c
  • 听起来像是静态初始化命令惨败的例子。
  • 你有Qt类型的静态变量吗?

标签: c++ linux qt


【解决方案1】:

在库初始化期间,Qt 内部似乎出现了问题。基于https://bugreports.qt.io/browse/QTBUG-28788,我感觉您以某种方式混合了 Qt4 和 Qt5 库。 (或者可能是不同版本的 Qt5 库。随便。你遇到了奇怪的链接问题。)

使用ldd 检查您的最终二进制文件链接到什么,并确保列出的每个 Qt 库的版本完全相同。

【讨论】:

  • 感谢您的回答!你是对的,我解决了我的问题。事实上,我使用的是 PCl(点云库)和 QT5。 PCL需要VTK,所以我安装了VTK6。然后QT4和QT5之间发生了冲突。我将VTK降级到5.8版,冲突消失了!我学到的教训:最新版本并不总是最好的!谢谢你的线索!
猜你喜欢
  • 2021-04-18
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
相关资源
最近更新 更多