如何在 C++ 中跟踪无效指针?
Posted
技术标签:
【中文标题】如何在 C++ 中跟踪无效指针?【英文标题】:How to track a invalid pointer in C++? 【发布时间】:2013-11-08 17:59:55 【问题描述】:我已准备好使用PROOF 运行我的代码。
每当我独立运行代码时,我都可以正常工作,但当我激活 PROOF 时,我的代码会因分段错误而崩溃。
使用 GDB,我能够准确地知道它崩溃的位置:当我尝试跟随指向对象的指针时。这让我觉得这个指针(我绝对确定它之前是有效的)是无效的,我不知道为什么会这样。
还有其他选择吗?我可以跟踪那个指针以便知道它是在哪里释放的吗?
【问题讨论】:
你的意思是它释放了已经释放的指针? 通常,我使用 valgrind 来处理这样的事情。如果使用-g
编译并使用valgrind的--track-origins=yes
选项,可以在代码中找到无效读取的位置和未初始化数据的位置。
@user2533527 不,在程序的那个阶段,该指针应该包含对程序至关重要的信息,所以我实际上需要使用它
我会试试@Alex
太棒了!发布它报告的任何错误。 :)
【参考方案1】:
将valgrind
memcheck tool 与--leak-check=summary --track-origins=yes
一起使用。
这显示了无效的内存访问(分段错误)以及它们被释放的位置。
【讨论】:
以上是关于如何在 C++ 中跟踪无效指针?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 munmap_chunk():C++ 中的无效指针错误
android studio2.3.3 模拟器 Jni函数调用C++对象,lldb调试this指针和相关变量显示无效的原因