Ich habe mehrere Beiträge über diesen Fehler gesehen, jedoch konnte ich keine Lösung finden. In meinem Code habe ich einen Vektor von "Gene" und jedes Gen enthält eine Quelle und ein Ziel in der Form eines int.C++ Laufzeitfehler: free(): ungültige nächste Größe (fast)
Ich möchte einen Vektor von Ints erstellen, der alle verschiedenen möglichen Werte der Quelle und des Ziels im Vektor der Gene enthält. Ich beginne damit, jedes Gen durchzugehen und die Quelle und das Ziel zu identifizieren und dann zu prüfen, ob diese ID bereits in dem Vektor existiert. Wenn dies der Fall ist, dann ignoriere es, aber falls es ein neuer Wert ist, füge es dem Vektor hinzu.
void addMutations(vector<Gene*>* genome){
vector<int> nodeIDs;
for(int i = 0; i < genome->size(); i++){
int src = genome->at(i)->sourceNeuronID;
int dst = genome->at(i)->destinationNeuronID;
if(find(nodeIDs.begin(), nodeIDs.end(), src) == nodeIDs.end()){
nodeIDs.push_back(src);// <-- Issue is here
}
if(find(nodeIDs.begin(), nodeIDs.end(), dst) == nodeIDs.end()){
nodeIDs.push_back(dst);// <-- Probably here too
}
}
Hat das Problem aus der Tatsache, dass src
und dst
am Ende der Iteration der for
Schleife außerhalb des Gültigkeitsbereiches gehen?
"Das Problem" wäre ... was? Die Fehlermeldung im Titel? Ich sehe nicht, wie ein "push_back" in einen Vektor von ints diesen Fehler geben könnte (da es kein 'free()' in irgendeiner Weise gibt). – DevSolar
Dies geschieht normalerweise, wenn Sie außerhalb des reservierten Speichers schreiben. Mein Vorschlag ist, dass Sie aufhören, Zeiger so zu verwenden. Übergeben Sie einen Zeiger an den Vektor, übergeben Sie eine Referenz. Und anstatt einen Vektor von Zeigern zu haben, sollte man einen Vektor von Instanzen haben (es sei denn, man benötigt Zeiger für Polymorphie, die man nicht zu benutzen scheint). Anstelle eines Vektors für die Knoten-IDs könnten Sie auch ein ['std :: unordered_set'] (http://en.cppreference.com/w/cpp/container/unordered_set) verwenden. –
Sie müssen ein [MCVE] –