求助: 感謝dominic hamon感謝了它。這一切歸結爲試圖調用一個有點空對象的功能。它可以使用對象的一部分而不使用其他對象。std :: map <MyClass,std :: vector <MyClass>>段錯誤。奇數
我不知道這可能發生。
問題
我曾經歷過一個奇怪的分段錯誤與
std::map< IntVector3, std::vector<IntVector3> >.
在我MyClass.hpp文件,我有這樣的一個私人財產:
std::map< IntVector3, std::vector<IntVector3> > recurData;
在我MyClass.cpp MyClass的構造函數中的文件i可以運行
std::vector<IntVector3> pt;
pt.push_back(IntVector3(1,2,3));
recurData[IntVector3(1,2,3)] = pt;
這運行正常,我沒有得到過錯。
後來在程序中,我調用MyClass中的一個函數來完成同樣的事情,改變了recurData。不在構造函數中。這會導致分段錯誤。我的知識沒有影響recurData的其他變化。
IntVector3的可實現的是: http://pastebin.com/Hc83xapk
有很多,我加入是不必要的額外運營商的(> =,< = ...)。 (我試圖遵循3的規則)
唯一真正的奇怪是<運營商。這使用一個std :: string來比較。這個快速黑客應該適用於所有x,y,z,如果他們在99以下。
感謝您的幫助,這一直讓我瘋狂。
你必須確保你的密鑰類型的'運營商<'是*嚴格弱序*:
像的
<
典型的實現將是什麼。仔細檢查是否是這種情況。 –seg-fault對應哪行代碼?你有沒有試過把你的代碼縮減到最小的測試用例? –
stacktrace?段錯在哪裏發生?那麼IntVector3的複製構造函數呢? – pokey909