【问题标题】:How to track a invalid pointer in C++?如何在 C++ 中跟踪无效指针?
【发布时间】:2013-11-08 17:59:55
【问题描述】:

我已准备好使用PROOF 运行我的代码。

每当我独立运行代码时,我都可以正常工作,但当我激活 PROOF 时,我的代码会因分段错误而崩溃。

使用 GDB,我能够准确地知道它崩溃的位置:当我尝试跟随指向对象的指针时。这让我觉得这个指针(我绝对确定它之前是有效的)是无效的,我不知道为什么会这样。

还有其他选择吗?我可以跟踪那个指针以便知道它是在哪里释放的吗?

【问题讨论】:

  • 你的意思是它释放了已经释放的指针?
  • 通常,我使用 valgrind 来处理这样的事情。如果使用-g编译并使用valgrind的--track-origins=yes选项,可以在代码中找到无效读取的位置和未初始化数据的位置。
  • @user2533527 不,在程序的那个阶段,该指针应该包含对程序至关重要的信息,所以我实际上需要使用它
  • 我会试试@Alex
  • 太棒了!发布它报告的任何错误。 :)

标签: c++ pointers segmentation-fault


【解决方案1】:

valgrind memcheck tool--leak-check=summary --track-origins=yes 一起使用。

这显示了无效的内存访问(分段错误)以及它们被释放的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2018-08-23
    相关资源
    最近更新 更多