0

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

4

4 回答 4

0

机会是:

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

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

于 2010-10-10T06:20:16.700 回答
0

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

于 2010-10-10T06:37:21.047 回答
0

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

于 2010-10-10T06:51:36.880 回答
0

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

也许你做这样的事情:

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

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

于 2010-10-10T06:23:22.173 回答