以下代碼在使用GCC 6.1.0進行編譯時會生成分段錯誤。奇怪的是,錯誤是一致的,但不會發生較小的尺寸或略有不同的比較表達式。 你們有什麼想法,爲什麼?GCC std :: sort與lambdas的錯誤行爲
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
int n = 1000;
std::vector<std::pair<double, double>> vec;
for(int i = 0; i < n; i++) {
vec.push_back(std::make_pair<double, double>((7*i)%3, (3*i)%5));
}
std::sort(vec.begin(), vec.end(), [](std::pair<double, double> const & p1, std::pair<double, double> const & p2) {return (p1.first < p2.first) || ((p1.first==p2.first)&& (p1.second <= p2.second));});
return 0;
}
你應該知道,如果你想要的只是一個詞法對比,那麼'std :: pair'已經做到了,不需要你的干預。 – StoryTeller
@StoryTeller感謝您的提示。但是現在真正困擾我的是分段故障的來源! –
來源在你的比較中,不會產生正確的順序關係。該代碼具有未定義的行爲。 – StoryTeller