如何在 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指针和相关变量显示无效的原因

不评估应用了 sizeof 的表达式是不是使得在 C++ 中取消引用 sizeof 内的空指针或无效指针是合法的?

如何知道指针是不是已在其他地方释放

C++ 字符串:无效的指针错误

如何在 C++ 中跟踪内存分配(尤其是新建/删除)