Как исправить sysmalloc: ошибка утверждения в C - PullRequest
1 голос
/ 02 мая 2019

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

Заранее спасибо!

...