2015-04-05 2 views
4

Существует структура в моей программеПрограмма получила сигнал 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? Извините, если этот вопрос уже был задан, я не мог понять, просматривая их.

+0

Мы понятия не имеем, что вы делаете неправильно. Где ваш [тестовый файл] (http://sscce.org)? –

ответ

1

Либо вы потеряли память (возможно, ваш список слишком велик для вашей памяти), либо вы пытаетесь найти где-то в памяти, которой вам не разрешено.


Поскольку список мал, то я подозреваю, что это проблема (как указано here):

abort() обычно называют библиотечными функциями, которые обнаруживают внутреннюю ошибку или какое-либо серьезно нарушено ограничение. Например, malloc() вызовет abort(), если его внутренние структуры повреждены переполнением кучи.

Другой актуальный вопрос: here.

Поэтому я предлагаю вам взять листок бумаги и ручку и нарисовать то, что делает ваш код. Вероятно, есть путающий указатель или что-то в этом роде.

+0

Существует небольшой список (из 8 элементов) – Tami

+0

Отредактировано @Tami. Кажется, у вас там ошибка памяти! Ваша функция выглядит хорошо для меня. Хороший вопрос, кстати, +1. – gsamaras

+0

Спасибо, я действительно забуду весь код еще раз, потому что есть много указателей, где может произойти ошибка – Tami

Смежные вопросы