Во-первых, я извиняюсь, потому что это действительно обычная ошибка, но то, что запускает ее, кажется разным в каждом потоке, который я могу найти в stackOverflow.
У меня ошибка malloc.c:2405: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
при попытке динамически выделить двойной связанный список в C. Вот мой код:
typedef struct Node{
int key;
struct Node *prev, *next;
} node;
typedef struct List{
int size;
int cost;
struct Node *head;
} list;
node *new_node(int key, node *prev){
node *n = malloc(sizeof(node));
n->key = key;
n->prev = prev;
n->next = NULL;
return n;
}
list *new_list(int size){
int i;
node *aux;
list *L = malloc(sizeof(list));
L->size = size;
L->cost = 0;
L->head = new_node(-1,NULL);
aux = L->head;
for(i=1;i<=size;i++){
aux->next = new_node(i,aux);
aux = aux->next;
}
return L;
}
Теперь самое странное, что ошибка появляется только для некоторых значений (10 и 30, насколько япроверено) и если я добавлю printf
вокруг кода, все вернется на круги своя.Мой друг сказал мне, что printfs может сбрасывать регистры с компьютера, и это может иметь значение, но он не знал больше.Есть идеи?
Заранее спасибо!