【问题标题】:Pointer giving garbage values even after being set即使在设置后也给出垃圾值的指针
【发布时间】:2010-10-10 14:51:36
【问题描述】:

我遇到了一个奇怪的指针问题。我正在构建一个用于光线追踪的 k-d 树,在 BuildKDtree 函数期间,我打印了 root->left 和 root->right,我得到了存储在节点上的各种属性的正确值。 当我完成该代码然后尝试使用原始根的指针遍历树时,root->left 和 root->right 值包含垃圾和代码崩溃! 关于可能导致这种情况的任何建议? 如有必要,我可以粘贴代码,但它非常笨拙。

【问题讨论】:

  • 这可能只是原始根指针的缺失分配,或类似的东西。如果可以,请发布代码。制作副本并尝试将其精简到绝对必需品的好主意。

标签: c++ raytracing


【解决方案1】:

BuildKDtree 函数的签名是什么?是否有可能某处有一个指针,但实际需要的是一个指向指针的指针?只是想猜测:)

【讨论】:

  • 谢谢 arun 其实我也是这么想的,但我想现在解决了。
【解决方案2】:

机会是:

  • 为 root 分配数据结构时,实际上并没有获得有效的地址。
  • 您的一些其他代码(或您正在使用的框架)的写入超出了结构的范围。

一般来说,由于 SEGFAULT 的原因,第二种可能性较小,但除非您实际写入过去的页面边界,否则这些情况并不能保证发生。听起来像是一个令人讨厌的调试问题,试试 valgrind :)

【讨论】:

    【解决方案3】:

    你能检查一下这个指针是否有效吗?

    也许你会这样做:

      Node n = 0;
      n->doThat();
    

    在这种情况下,这将没有任何有效的左右指针。

    【讨论】:

      【解决方案4】:

      感谢大家指出一些可能的情况。我发现了错误。我实际上并没有在 BuildKDtree 函数中分配动态内存。所以在它里面一切正常。但是当我返回时,变量被破坏了,因此出现了错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多