gpt4 book ai didi

c - 为什么这个 C 代码不起作用?

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

我试图在每个节点中插入两个随机字符串,但是当我打印列表时,输出不正确。它可以是什么?我不擅长内存分配,所以如果有任何问题请解释我。我还尝试查看一个字符串是否正在覆盖另一个字符串,但情况似乎并非如此。

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

struct node{
int times;
char name[100];
char number[100];
struct node* next;
};

typedef struct node* node;

void mklist(node* n){
*n=(node)malloc(sizeof(node*));
(*n)->times=0;
strcpy((*n)->name,"null");
strcpy((*n)->number,"null");
(*n)->next=(node)NULL;
}

void listins_beg(node* n,char name[],char num[],int tim){
node a;
a=(node)malloc(sizeof(node));
if(a==NULL) exit(1);
a->times=tim;
strcpy(a->number,num);
strcpy(a->name,name);
a->next=(node)(*n);
(*n)=a;
}

void printlist(node n){
node x;
x=n;
if(x->next==NULL) printf("EMPTY LIST");
else{
do{
printf("%s - %s\n",x->name,x->number);
x=x->next;
}while(x->next!=NULL);
}
}

void freelist(node* n){
node x;
for(;x->next!=NULL;(*n)=(*n)->next){
x=(*n);
free(x);
}
}

int main(void){
node n;
mklist(&n);
listins_beg(&n,"Hermanouhuhuuteu","4523-2248",300);
listins_beg(&n,"Luhu","4523-4887",299);
listins_beg(&n,"Lulamolute","4523-4687",512);
printlist(n);
freelist(&n);
return 0;
}

最佳答案

你在你的代码中做了typedef struct node* node。但是在你的函数makelistlistins_beg中你使用了

 *n=(node)malloc(sizeof(node*));
a=(node)malloc(sizeof(node));

现在这里 *n 是一个指向 struct node 的指针,但它只分配了 8 byte4 byte 内存code> 取决于您的机器,因为 sizeof(node*) 将返回 8 或 4,因为 node* 是一个 pointer to pointernode,同样的事情发生在为a分配内存时,应该是这样的

 *n=(node)malloc(sizeof(struct node)); //in makelist
a=(node)malloc(sizeof(struct node)); //in listins_beg

关于c - 为什么这个 C 代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50533586/

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