0

ポインターに奇妙な問題があります。レイトレーシング用のkdツリーを構築しており、BuildKDtree関数の実行中に、root->leftおよびroot->rightを出力し、ノードに格納されているさまざまな属性の正しい値を取得します。そのコードを完成させてから、元のルートのポインターを使用してツリーをトラバースしようとすると、root->leftとroot->rightの値にガベージが含まれ、コードがクラッシュします。これを引き起こしている可能性があるものについての提案はありますか?必要に応じてコードを貼り付けることもできますが、かなり不器用です。

4

4 に答える 4

0

可能性は次のとおりです。

  • ルートにデータ構造を割り当てるとき、実際には有効なアドレスを取得していません。
  • あなたの他のいくつかのコード(またはあなたが使用しているフレームワーク)は、構造の範囲外で書き込んでいます。

一般的に言えば、SEGFAULTが原因で、2番目の可能性は低くなりますが、実際にページ境界を超えて記述しない限り、これらが発生することは保証されません。デバッグの厄介な問題のように聞こえます。valgrindを試してください:)

于 2010-10-10T06:20:16.700 に答える
0

このポインタが有効かどうかを確認できますか?

おそらくあなたはこのようなことをします:

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

この場合、これには有効な左ポインターと右ポインターがありません。

于 2010-10-10T06:23:22.173 に答える
0

BuildKDtree関数のシグネチャは何ですか?どこかにポインタがある可能性はありますが、実際に必要なのはポインタからポインタです。推測しようとしているだけです:)

于 2010-10-10T06:37:21.047 に答える
0

いくつかの可能な条件を指摘してくれてありがとう。間違いを見つけました。実際には、BuildKDtree関数で動的メモリを割り当てていませんでした。そのため、内部ではすべてが正常に機能しました。しかし、変数を返すと、変数が破棄され、エラーが発生しました。

于 2010-10-10T06:51:36.880 に答える