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