gpt4 book ai didi

c - C 中的错误;方法分割错误

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

所以我的这段代码出现了段错误,我不知道为什么。我认为这与我使用 NULL 错误(?)有关,但我不认为就是这样。 .我尝试添加更多错误消息以查看是否可以执行此操作,但我仍然收到相同的错误/:

char* lookup(Dictionary D, char* k){
Node N = D->head;

if(D == NULL){
fprintf(stderr, "Error: calling lookup() on null Dictionary");
exit(EXIT_FAILURE);
}

while(N!=NULL){
if(strcmp(N->key,k)==0){
return N->value;
break;
}
N = N->next;
}
return NULL;
}


void insert(Dictionary D, char* k, char* v){
// Node N = D->head;

if(D==NULL){
fprintf(stderr, "Error: inserting on a null Dictionary\n");
exit(EXIT_FAILURE);
}

if(lookup(D,k)!=NULL){
fprintf(stderr, "already existing\n");
exit(EXIT_FAILURE);
}

else{

if(D->numItems==0){
Node N;
N = newNode(k,v);
D->head = N;
D->numItems++;
}

//if there is only a head node, add node after it
else{
Node S = D->head;
while(S!=NULL) {
S = S->next;
}
S->next = newNode(k,v);
}
D->numItems++;
}

}

最佳答案

在lookup()函数中

 Node N = D->head;
if(D == NULL){

在检查 D 是否为 NULL 之前,您已经访问过 D。这可能会导致 NULL 指针访问和核心转储。

在 insert() 函数中:

 while(S!=NULL) {
S = S->next;
}
// You are guaranteed that S is now == NULL, so the
// next line is a NULL pointer access.
S->next = newNode(k,v);

您需要保留最后一项,以便可以说 last->next = newNode(k, v);

另外:如果集合中有 0 个项目,numItems 不会增加两次吗?由于代码格式错误,很难判断...

其他评论:

  • 显然,您有 Dictionary 和 Node 的 typedef,隐藏了它们是指针的事实。不要那样做。这会让任何阅读代码的人感到困惑。
  • 一个非常常见的约定是类型以大写字母开头,而不是变量,因此 DNS 都是不好的名字。无论如何,你可以做得比 1 个角色名称更好。 dictnode
  • 怎么样?

关于c - C 中的错误;方法分割错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56140686/

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