求助: 感谢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