我有兩個類,BTLeafNode和BTNonLeafNode,其中每一個派生自我的類BTreeNode。 BTreeNode有一個受保護的數據成員緩衝區,它是一個1024字節的字符數組。 BTreeNode有一個模板函數inserttemp,它在緩衝區中存儲int-T對,其中T是調用該函數的類型。每個類都有自己的調用inserttemp的函數插入。 BTNonLeafNode存儲int-PageId對(PageId基本上是一個int),BTLeafNode將int-RecordId對(記錄Id由PageId和一個int組成)存儲到緩衝區中。我還沒有測試BTNonLeafNode,但由於某種原因,當我只有兩個BTLeafNode實例,並且我調用插入函數時它工作正常,但對於在宣告至少兩個BTLeafNode實例後聲明的任何BTLeafNode實例,它擰緊了。應該在RecordId中存儲int的內存部分將存儲下一個int-RecordId對的整數(這兩部分數據在緩衝區中彼此相鄰存儲)。類成員函數失敗時,至少有兩個類聲明之前
我真的很困惑,因爲我不明白爲什麼聲明一個實例會弄亂函數。沒有任何全局變量。您甚至不需要對已聲明的實例進行任何操作,只要您聲明它會使函數失效即可。
發佈將重現此行爲的最小代碼會很有幫助。沒有看到你在做什麼很難說。 – 2011-05-22 04:40:23
我也懷疑其他評論者的插入方式。似乎有一個緩衝區溢出。如果您使用MS visual studio,請使用'/ GS'標誌(也可能是'/ GZ')來檢查緩衝區溢出。它會拋出緩衝區溢出異常,你可以檢查調用堆棧 – hackworks 2011-05-22 05:03:54