0
私はcygwinプラットフォームでのみ発生するクラッシュを分離したと思います。 linux上でvalgrindを実行しようとしましたが、何の効果もなく、メモリエラーは報告されません。私は..私は& DERを参照してr.grを削除するにはPolynomeデルを交換する場合PolynomesC++のクラッシュstd :: map
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
});
}
からゼロmonomesを削除する機能を持っている[K1] =デル、その後、私はクラッシュを取得します。 std :: mapの値を変更することは危険ですか?問題が起きた場所を見つけるにはどうすればいいですか?ありがとう!
どのような変更によりクラッシュするのかを明確にすることはできますか?私はあなたが最後の文で何を話しているのか不明です。オフハンドでは、あなたの 'removeZeroes'関数*は* okと思われるので、問題はおそらく他の場所にあります。 –
'r.grandDerivatives [k1]'の戻り値の型は何ですか? – NathanOliver
'if(it-> second == 0)'を使い、もう一度別のマップルックアップを実行しません。 –