gpt4 book ai didi

c - 添加节点到链表失败

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:44 24 4
gpt4 key购买 nike

我做了改变但是我不能添加超过 2 个节点,它会卡住,但如果 1 或 2 个节点可以正常工作,原因是什么???我放弃我对此无能为力这是我的代码,直到时间

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

struct info{
int num;
char name[15];
struct info *next;
};

struct info *first,*current,*new_s;
int struct_num;
void add_struct(void);

int main(){
first=NULL;
add_struct();
puts("done");
add_struct();
puts("done");
add_struct();
puts("done");

return(0);
}

//结构添加函数

void add_struct(void){

new_s= malloc (sizeof(struct info));
if(!new_s){
puts("error");
exit (1);
}
if(first==NULL){
first = current= new_s;
first->next = NULL;
}else{
current=first;

while(current->next!=NULL){
current=current->next;
}

current->next=new_s;
current=new_s;
}

struct_num++;
}

最佳答案

你的代码中的问题是

if( first==NULL){
first->next=new_s;

如果 first 为 NULL,您应该取消引用它。这在逻辑上是错误的,并调用了 undefined behaviour .

我认为,您想要的是(伪代码)之类的东西

if(first == NULL){
first = new_s;
first->next = NULL;

也就是说,

    current->next=new_s;
current=new_s;

看起来也有问题。第二个陈述是错误的,不是必需的,相反,您可以添加类似

   current->next = new_s;
current->next->next = NULL;

最后,根据当前用法,您的 struct_num 变量应该是全局

注意:

  1. main() 的推荐签名是int main(void)
  2. do not cast malloc()C 中的 family 的返回值。
  3. 在使用返回的指针之前始终检查 malloc() 是否成功。

关于c - 添加节点到链表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232025/

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