Я пытался написать следующую программу для конкурса программирования (уже закончил). Тем не менее, я продолжаю получать ошибку SIGABRT. Я должен очистить все контейнеры, прежде чем запускать следующий тестовый пример. Что я должен проверить?Как избежать ошибок SIGABRT в C++?
Это, как я реализую код: 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()' находится в стеке вызовов, это означает, что она исходит изнутри программа, возможно, из-за ошибки программирования, приводящей к вызову runtime, вызывающему 'abort()'. – Ben