簡體   English   中英

在拋出“ std :: bad_alloc”實例的what():std :: bad_alloc實例后終止調用

[英]terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc"

造成此錯誤的原因是什么?實際上,我不想受到先前測試用例結果的影響,因此在測試用例開始時,我清空了隊列,以便每個測試用例都可以重新開始。

#include <iostream>      
#include <queue> 
using namespace std;   
int main()
{
queue <int> first;
queue <int> empty;
queue <int> second;
int i,j,k,l,n,m,a,p,q;
int test,t;
std::cin>>test;
t=test;
  while(test--)
     {

        swap(first,empty);
        swap(second,empty);

       std::cin>>n>>m;
       a=2*n;
         for(i=1;i<=a;i++)
                 {
                    first.push(i);
                 }
          for(i=a+1;i<=m;i++)
                   {
                     second.push(i);
                   }
       for(i=1;i<=a;i++)
             {
               p=second.front();
                second.pop();
                   cout<<p;
              q=first.front();
                  first.pop();
                     cout<<q;
              }

   }
 }      

這里的問題在於線路,

swap(first, empty);
swap(second, empty);

當第一次交換被調用時,“空”變為“第一”(“第一”變為“空”)。 現在,當第二次交換被調用時,empty不再是空的(它具有“ first”)。

為了解決這個問題,一個解決方案可能是

first = queue<int> ();
second = queue<int> ();

清空隊列。

另一個解決方案是寫

first = empty;
second = empty;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM