c - 具有作用域和全局变量的 Malloc

标签 c malloc

#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/

相关文章:

c - 如何跟踪应用程序正在动态加载哪些库?

c - 在 malloc 实现中维护空闲列表

c - 如何在 C 中使用动态矩阵

c - Malloc 2372(错误)无法识别我错在哪里

c - C中静态结构的成员变量

c - 求数组中两个数的最大和

C malloc 和 memcpy 在拆分 char 数组时给出条件跳转 valgrind 错误

C: Printf 改变变量的值

c - OpenCV 错误 : Null pointer with canny

c - 在 Solaris 10 上从 C 获取 CPU 使用率统计信息