tour_indexes.clear();
for (int i=0; i<num_of_cities; i++)
{
tour_indexes.push_back(i);
}
mt19937 gen(random_engine());
uniform_real_distribution<> dis(0, 1);
// Sort indexes based on comparing values in tour. Choose at random if equal
sort(tour_indexes.begin(), tour_indexes.end(),
[&tour, &dis, &gen](int &i1, int &i2)
{
if (tour[i1] == tour[i2])
{
return dis(gen) < 0.5;
}
return tour[i1] < tour[i2];
});
Das gibt mir eine segfault auf tour[i1] == tour[i2]
, und wenn ich finde, das Debuggen, dass es ist, weil i2
ist manchmal (scheinbar nicht deterministisch) viel größer als es sein sollte. ZB 403163787 (es variiert), wenn tour_indexes
ist zB 0 - 20 (und ich habe zur Fehlerzeit überprüft, dass tour_indexes
enthält nicht i2
).C++ Art Iteration manchmal gibt falschen Wert
Dies alles geschieht in einer Member-Funktion in einer Klasse, die die Elementvariable tour_indexes
enthält. Das Klassenobjekt befindet sich in einem shared_ptr, wenn dies relevant ist. Irgendwelche Ideen, was könnte das Problem sein? Vielen Dank.
Können Sie bitte versuchen, ein [minimales, vollständiges und überprüfbares Beispiel] zu erstellen (http://stackoverflow.com/help/mcve) und uns zeigen? Einschließlich der Definition und Initialisierung von 'tour' und' num_of_cities'. –
@Someprogrammerdude: Ja, im Prinzip. In der Praxis bedeutet "segfault from std :: sort" mindestens 99% der Zeit "mein Vergleichsoperator ist nicht gültig". –