Ich denke, ich habe Absturz isoliert, die nur auf Cygwin-Plattform passiert. Versucht, mit Valgrind auf Linux zu laufen - keine Wirkung, meldet keine Speicherfehler. Ich habe Funktion Null Monomes von PolynomeAbsturz in C++ 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
});
}
entfernen Wenn ich Polynome der ersetzen & der referenzieren und r.gr entfernen .. [k1] = der, dann habe ich einen Absturz zu bekommen. Ist es unsicher, den Wert von std. :: map zu ändern? Wie kann ich einen Ort finden, an dem ein Problem auftritt? Danke!
Können Sie genau klären, welche Änderung es zum Absturz bringt? Ich bin unklar, über welche Veränderungen Sie im letzten Satz sprechen. Offenbar scheint Ihre 'removeZeroes'-Funktion * ok zu sein, so dass das Problem wahrscheinlich woanders ist. –
Was ist der Rückgabetyp von 'r.grandDerivatives [k1]'? – NathanOliver
Sie möchten 'if (it-> second == 0)' verwenden und keine weitere Map-Suche erneut durchführen. –