-1
我正在嘗試爲編程競賽(已結束)編寫以下程序。但是,我不斷收到SIGABRT錯誤。在運行下一個測試用例之前,我一定要清空所有的容器。我應該檢查什麼?如何避免C++中的SIGABRT錯誤?
這是怎麼了執行代碼: http://discuss.codechef.com/questions/29659/lowsum-editorial
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
class compare
{
public:
bool operator()(int a, int b)
{
return a>b;
}
};
int main()
{
int T,K,Q;
vector<int> A,B,q,nsum;
priority_queue<int, vector<int> , compare> PQ; //min PQ
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&K,&Q);
A.resize(K);
B.resize(K);
q.resize(Q);
for(int i= 0;i<K;++i)
scanf("%d",&A[i]);
for(int i=0;i<K;++i)
scanf("%d",&B[i]);
int max_q=0;
for(int i=0;i<Q;++i)
{
scanf("%d",&q[i]);
if(q[i]>max_q)
max_q=q[i];
}
sort(A.begin(),A.end());
sort(B.begin(),B.end());
while(!PQ.empty())
PQ.pop();
int j=0;
while(max_q > 0 && j < K)
{
for(int i=0;i<K;++i)
PQ.push(A[i]+B[j]);
max_q--;
j++; //next element of B[]
}
while(!PQ.empty())
{
nsum.push_back(PQ.top());
PQ.pop();
}
for(int j=0;j<Q;++j)
printf("%d\n",nsum[q[j]-1]);
nsum.clear();
}
}
您是否嘗試過在調試器中運行? –
給定的測試用例在我的電腦上運行良好。這是我向法官提出的錯誤。它必定是一個導致它的特定測試用例,我無法自己找到它。 :(一般的原因是什麼? – user2441151
SIGABRT可以來自程序內部或外部,但通常在內部,在調試器中運行,如果調用堆棧中有'abort()'函數,則表示它來自內部該程序可能是由於編程錯誤導致運行時調用'abort()'。 – Ben