gpt4 book ai didi

c - 为什么我的用于将元素插入哈希树的 C 代码在 Main() 中可以工作,但当我通过函数调用它时却不能工作?

转载 作者:行者123 更新时间:2023-11-30 18:23:40 25 4
gpt4 key购买 nike

我相当确定这与指针和使用副本的函数有关,但我不确定如何...因为我已将指针作为 create() 的参数插入;

#include <stdio.h>
#include <cs50.h>
#include <string.h>

typedef struct list {
string word;
struct list *next;
}
linkedList;

struct list* create (string newWord) {
linkedList *new = malloc(sizeof(newWord));
new->word = newWord;
new->next = NULL;
return new;
}

struct list* insert (struct list *theList, string newValue) {
linkedList *anotherOne = create(newValue);
anotherOne->next = theList;
return anotherOne;
}

int hash (string name) {
return strlen(name);
}

void hashInsert (struct list *theList, string newValue) {
theList = create(newValue);
}

int main(void) {
linkedList *names[24] = {NULL};
int num = hash("heey");
// names[num] = create("heey"); // <- this code works when I uncomment it
hashInsert(names[num], "heey"); // <-- this causes a segfault.. idk why
printf("%s", names[num]->word);
}

最佳答案

您的hashInsert函数创建指针的本地副本(theList),您修改所述本地副本,但实际指针在您的main中> 函数仍设置为NULL。调用 printf 是导致段错误的原因。

您可以通过将指针传递给函数的指针来解决此问题

void hashInsert(string list **theList, string newValue) {
*theList = create(newValue);
}

然后调用它

hashInsert(&names[num], "heey");

这样,您就可以修改 main 中的指针值。

编辑

此外,正如注释所述,您的 malloc 确实没有分配足够的内存,您还需要一些内存来存储下一个列表指针。

关于c - 为什么我的用于将元素插入哈希树的 C 代码在 Main() 中可以工作,但当我通过函数调用它时却不能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51629456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com