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