程序接收信号SIGABRT,已中止

Tam*_*ami 5 c++ ubuntu sigabrt

我的程序中有一个结构

struct List      
{
    int data;
    List *next;
};
Run Code Online (Sandbox Code Playgroud)

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

gdb说到了这个问题

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

Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()
Run Code Online (Sandbox Code Playgroud)

排队

tail->next = new List;
Run Code Online (Sandbox Code Playgroud)

我尝试制作另一个类型为List的变量:

List* add;
add = new List;
Run Code Online (Sandbox Code Playgroud)

但在第二行遇到了同样的问题.

如何正确地重写?是否需要粘贴调用addL的函数?对不起,如果这个问题已经被问过,我一看就知道了.

gsa*_*ras 5

要么你的内存不足(也许你的列表对于你的记忆来说太大了),要么你正在尝试内存中不允许你做的某个地方。


由于列表很小,所以我怀疑这就是问题所在(如此处所述

abort()通常由检测内部错误或某些严重破坏的约束的库函数调用。例如,如果其内部结构因堆溢出而损坏,malloc()则会调用。abort()

另一个相关问题就在这里

所以我建议你拿一张纸和一支笔画出你的代码的作用。可能有一个缠结的指针或其他东西。