在这里演员:
我正在编写一个程序以使用单链接列表来实现地图。写作并包含此插入方法后,程序会生成分段故障,但我不确定它来自何处。
int map_insert(Map *theMap, char *theKey, void *theItem){
node *newNode = malloc(sizeof(node));
node *cursor = theMap->root;
while(cursor->next != NULL){
cursor = cursor->next;
}
newNode->key = theKey;
newNode->item = theItem;
newNode->next = NULL;
cursor->next = newNode;
return (node *)newNode;
}
node *cursor = theMap->root;
我假设地图是空的,root将为null。
while(cursor->next != NULL)
如果root
是NULL
,则cursor
也是NULL
,并且在访问next
字段时您正在删除它。
也许将WARE条件更改为:
while (cursor && cursor->next)
?
编辑:这是一个有效的完整功能:
node * map_insert(Map *theMap, char *theKey, void *theItem){
node *newNode = malloc(sizeof(node));
newNode->key = theKey;
newNode->item = theItem;
newNode->next = NULL;
node *cursor = theMap->root;
if (cursor) {
while(cursor->next != NULL){
cursor = cursor->next;
}
cursor->next = newNode;
}
else
{
theMap->root = newNode;
}
return newNode;
}
函数 map_insert
的签名是
int map_insert(Map *theMap, char *theKey, void *theItem)
如您所见,它旨在返回int
。但是您返回node*
。通过将问题更改为:
node* map_insert(Map *theMap, char *theKey, void *theItem){
在这里演员:
return (node *)newNode;
不需要newNode
已成为node*
类型。