2010-10-10 63 views
0

我有一個奇怪的問題與指針。我正在建立一個光線跟蹤KD樹,並在BuildKDtree函數打印根 - >左和右 - >右,我得到正確的值用於存儲在節點上的各種屬性。 當我完成該代碼,然後嘗試使用原始根指針遍歷樹時,root-> left和root-> right值包含垃圾和代碼崩潰! 任何有關可能導致此問題的建議? 如果需要,我可以粘貼代碼,但它很笨拙。設置垃圾值後指針即使設置

+0

這可能只是一個缺失的原始根指針分配,或類似的東西。如果可以,請發佈代碼。好主意做一個副本,並儘量減少到絕對必需品。 – 2010-10-10 06:33:37

回答

0

BuildKDtree函數的簽名是什麼?有沒有可能有一個指針,但實際需要的是指針指針?只是想猜測:)

+0

謝謝阿倫其實我也這麼認爲,但我想現在就解決了。 – Manish 2010-10-10 06:48:53

0

機會是:

  • 當您分配root的數據結構,你不是實際上得到一個有效的地址。
  • 您的其他代碼(或您正在使用的框架)正在寫出結構的界限。

一般來說,第二個因爲SEGFAULT而不太可能,但是除非您真的寫出過去的頁面邊界,否則這些不會保證發生。聽起來像一個討厭的問題進行調試,嘗試valgrind :)

0

你能檢查這個指針是否有效嗎?

也許你做這樣的事情:

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

在這種情況下,這不會有任何有效的左側和右側的指針。

0

謝謝你們指出一些可能的條件。我發現了這個錯誤。我實際上沒有在BuildKDtree函數中分配動態內存。因此,它內部的每件事情都可以正常工作。但是當我返回時,變量被銷燬並因此出錯。