程序接收信号SIGABRT,已中止

时间:2015-04-05 17:13:59

标签: c++ ubuntu sigabrt

我的程序中有一个结构

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的函数? 对不起,如果这个问题已经被问过,我一看就知道了。

1 个答案:

答案 0 :(得分:1)

要么你的内存不足(也许你的名单对你的记忆来说太大了),要么就是在你不被允许的内存中尝试。


由于列表很小,我怀疑这是问题(如here所述):

  

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

另一个相关问题在于here

所以我建议你拿一张纸和一支笔画出你的代码所做的事情。可能有一个纠结的指针或什么。