簡體   English   中英

程序接收信號SIGABRT,已中止

[英]Program received signal SIGABRT, Aborted

我的程序中有一個結構

struct List      
{
    int data;
    List *next;
};

以及向列表尾部添加元素的功能:

void addL(List* &tail, int dat)   
{

    if (tail==NULL) 
    {
        tail = new List;
        tail->data = dat; 
        tail->next=NULL;
    }   
    else
    {
        tail->next = new List;
        tail = tail->next;
        tail->data = dat;
        tail->next = NULL;
    }
}

gdb說到了這個問題

terminate called after throwing an instance of 'St9bad_alloc'
  what():  std::bad_alloc

Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()

排隊

tail->next = new List;

我嘗試制作另一個類型為List的變量:

List* add;
add = new List;

但在第二行遇到了同樣的問題。

如何正確地重寫? 是否需要粘貼調用addL的函數? 對不起,如果這個問題已經被問過,我一看就知道了。

要么你的內存不足(也許你的列表對你的記憶來說太大了),要么就是在你不被允許的內存中嘗試。


由於名單是小的,那么我懷疑這是問題(如說這里 ):

abort()通常由庫函數調用,它檢測內部錯誤或嚴重破壞的約束。 例如,如果內部結構被堆溢出損壞, malloc()將調用abort()

另一個相關問題在於此處

所以我建議你拿一張紙和一支筆畫出你的代碼所做的事情。 可能有一個糾結的指針或東西。

暫無
暫無

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

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