2
下面的程序,一個簡單的向量排序一個,在第二次排序調用時崩潰t> = 17。即使對於t == 100,第一次排序也會成功。 經過了相當長的時間,但我無法弄清楚什麼是錯誤的。有人可以幫幫我嗎?std :: sort(from <algorithm>)崩潰
我試過它在MacBook Air以及Linux機器上,出人意料的是,我看到了相同的結果。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct tc
{
unsigned int n;
};
bool sort_by_n(tc a, tc b)
{
return a.n <= b.n;
}
vector<tc> tcv(100);
vector<int> tv(100);
int main()
{
unsigned int t;
cin >> t;
for (unsigned int i = 0 ; i < t ; i++)
{
cin >> tcv[i].n;
tv[i] = tcv[i].n;
}
sort(tv.begin(), tv.begin()+t); // ## This one works even for t == 100.
sort(tcv.begin(), tcv.begin()+t, sort_by_n); // ## This one crashes for t >= 17
return 0;
}
非常感謝Daniel。這工作。我很驚訝它會導致這種行爲。 – vrk001
@ vrk001排序算法可能會進入無盡的遞歸,直到它用完了可用的堆棧空間,然後崩潰。 –
哦,我明白了。所以,對於大小小於等於16的分類,有一種不會崩潰的處理方式,對於大於等於17的大小,這是一個不太寬容的方法!謝謝你幫助我! :-) – vrk001