C-任何人都可以看到为什么此程序会生成细分故障



我正在编写一个程序以使用单链接列表来实现地图。写作并包含此插入方法后,程序会生成分段故障,但我不确定它来自何处。

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)

如果rootNULL,则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*类型。

相关内容

  • 没有找到相关文章

最新更新