如何修复sysmalloc:C中的断言错误

时间:2019-05-02 00:23:46

标签: c memory malloc allocation

首先,对不起,因为这似乎确实是一个常见错误,但是在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可能正在从计算机上重置寄存器,这可能会有所作为,但他对此一无所知。有见识吗?

谢谢!

0 个答案:

没有答案