C ++ std :: map崩溃 [英] Crash in C++ std::map
问题描述
我认为我已经孤立崩溃,只发生在cygwin平台。试图运行valgrind在linux - 没有效果,它报告没有内存错误。我有功能从Polynomes删除零个单体
I think I have isolated crash which happens only on cygwin platform. Tried to run with valgrind on linux — no effect, it reports no memory errors. I have function to remove zero monomes from Polynomes
typedef map<multiset<int>, double> Polynome;
void removeZeroes(Polynome&p){
for(auto it=p.cbegin();it!=p.cend();){
if(p[it->first]==0.) {
p.erase(it++);
} else ++it;
}
}
void calcGDerivatives(Reduced &r) {
auto vars = getAllVars(r);
cout<<"calculating derivatives"<<endl;
iterate(vars, [&r](multiset<int>k1)->void {
if (r.grandDerivatives.count(k1)) return;
Polynome der = r.grandDerivatives[k1];
for (auto &kv : r.grandPoly) {
Monome monDer = monomeDeriv(kv.first, k1);
multiset<int> p = kv.first;
if (monDer.first == 0) continue;
monDer.first *= kv.second;
add(der, monDer);
}
removeZeroes(der);
r.grandDerivatives[k1]=der; //since der is a copy
});
}
如果我将Polynome der替换为reference& der并删除r.gr. 。[k1] = der,那么我得到了一个崩溃。修改std :: map的值是不安全的吗?如何找到一个地方是问题发生? Thanx!
If I replace Polynome der to reference &der and remove r.gr..[k1]=der, then I get a crash. Is it unsafe to modify std::map's value? How can I find a place were problem happens? Thanx!
推荐答案
我终于找到了问题的真正原因。我的一个函数看起来像这样:
I've finally found true cause of the problem. One of my functions looked like this:
stl::vector<...> f(){
// do something
// forgot return
}
f();
这会立即导致cygwin崩溃。
This immediately gives a crash on cygwin.
这篇关于C ++ std :: map崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!