#include<stdio.h>
#include<stdlib.h>
struct node {
int num;
struct node *next;
}*head=NULL, *curr=NULL;
void print(){
curr = head;
while(curr != NULL){
printf("%d\n", curr->num);
curr = curr->next;
}
}
struct node* memAlo(){
return (struct node *)malloc(sizeof(struct node));
}
void addNode(int no){
curr = head;
while(curr != NULL){
curr = curr->next;
}
curr = memAlo();
if(curr == NULL){
printf("\nmemory up\n");
return;
}
else{
curr->num = no;
curr->next = NULL;
printf("%d\n",curr->num);
}
}
void hellop(){
printf("%d", head->num);
}
int main(){
int i;
curr = head;
for(i=1;i<10;i++){
addNode(i);
}
print();
/*head = memAlo();
head->num = 1;
head->next = NULL;
hellop();*/
}
我确信我在某个地方搞砸了。问题是头指针没有获得 memAlo() fn() 分配的内存,但是如何到达那里呢?请帮忙
我正在尝试创建一个包含 1 到 9 数字的单链表,并使用 print() 打印它们。实际上AddNode()是在每次执行main()中的for循环时在链表末尾创建单个节点。
最佳答案
您在首次定义 head
的位置设置了 head = NULL
。除了那个地方之外,我们在程序中的任何地方都不会在 =
的左侧看到 head
。所以当然 head
总是等于 NULL
而不是其他任何值。
您可能需要在 addNode
函数的开头插入一些代码来测试此时 head == NULL
是否成立;如果这是真的,您将需要将 memAlo()
的结果分配给 head
而不是 curr
。您还必须调整其他一些逻辑。
关于c - 具有作用域和全局变量的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22871116/