我有一個程序需要從C++中的2個文件輸入。然後識別第二個輸入文件是否是拓撲排序?但不知何故,如果我在while循環語句中使用list.empty(),它給了我一個分段錯誤,但for循環不會給我任何錯誤;然而,for循環只循環一次,因爲我可能需要經歷兩次。while循環中的段錯誤
#include <list>
#include <iostream>
#include <vector>
using namespace std ;
list<unsigned> output;
list<unsigned> &
testSort (istream & idata , istream & sdata)
{
unsigned n,x1,x2;
vector< list<unsigned> > successor(n);
vector<unsigned> count(n,0);
vector<bool> marks(n,false);
idata >>n;
for(int i=0;i<n;i++) {
idata>>x1>>x2;
count[x2]++;
successor[x1].push_back(x2);
if(idata.eof()) break;
}
for(int i=0;i<n;i++) {
sdata>>x1;
if(count[x1]==0) {
marks[x1]=true;
//for(int j=0;j<successor[x1].size();++j) {
while(!successor[x1].empty()) {
count[successor[x1].front()]--;
successor[x1].pop_front();
}
}
else {
for(int i=0;i<n;i++)
{
if(marks[i]==false)
output.push_back(i);
}
break;
}
}
return output;
}
當你遇到分段錯誤時,你應該做的第一件事就是在調試器中運行你的程序。這不僅可以幫助您查明崩潰的確切位置,還可以讓您檢查變量以查看可能導致崩潰的原因。 – 2012-04-16 05:41:49