Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有范围和全局变量的Malloc #包括 #包括 结构节点{ int-num; 结构节点*下一步; }*head=NULL,*curr=NULL; 作废打印(){ curr=头; while(curr!=NULL){ printf(“%d\n”,curr->num); 当前=当前->下一步; } } 结构节点*memAlo(){ 返回(结构节点*)malloc(sizeof(结构节点)); } void addNode(内部编号){ curr=头; while(curr!=NULL){ 当前=当前->下一步; } curr=memAlo(); if(curr==NULL){ printf(“\n内存向上\n”); 返回; } 否则{ 当前->数量=否; 当前->下一步=空; printf(“%d\n”,curr->num); } } void hellop(){ printf(“%d”,head->num); } int main(){ int i; curr=头; 对于(i=1;inum=1; head->next=NULL; hellop()*/ }_C_Malloc - Fatal编程技术网

具有范围和全局变量的Malloc #包括 #包括 结构节点{ int-num; 结构节点*下一步; }*head=NULL,*curr=NULL; 作废打印(){ curr=头; while(curr!=NULL){ printf(“%d\n”,curr->num); 当前=当前->下一步; } } 结构节点*memAlo(){ 返回(结构节点*)malloc(sizeof(结构节点)); } void addNode(内部编号){ curr=头; while(curr!=NULL){ 当前=当前->下一步; } curr=memAlo(); if(curr==NULL){ printf(“\n内存向上\n”); 返回; } 否则{ 当前->数量=否; 当前->下一步=空; printf(“%d\n”,curr->num); } } void hellop(){ printf(“%d”,head->num); } int main(){ int i; curr=头; 对于(i=1;inum=1; head->next=NULL; hellop()*/ }

具有范围和全局变量的Malloc #包括 #包括 结构节点{ int-num; 结构节点*下一步; }*head=NULL,*curr=NULL; 作废打印(){ curr=头; while(curr!=NULL){ printf(“%d\n”,curr->num); 当前=当前->下一步; } } 结构节点*memAlo(){ 返回(结构节点*)malloc(sizeof(结构节点)); } void addNode(内部编号){ curr=头; while(curr!=NULL){ 当前=当前->下一步; } curr=memAlo(); if(curr==NULL){ printf(“\n内存向上\n”); 返回; } 否则{ 当前->数量=否; 当前->下一步=空; printf(“%d\n”,curr->num); } } void hellop(){ printf(“%d”,head->num); } int main(){ int i; curr=头; 对于(i=1;inum=1; head->next=NULL; hellop()*/ },c,malloc,C,Malloc,我肯定我在某个地方搞砸了。问题是头指针没有得到memAlo()fn()分配的内存,但是如何到达那里?请帮助 我尝试的是创建一个包含从1到9的数字的单链接列表,并使用print()打印它们。实际上,AddNode()是每次在main()中的for循环时在链接列表的末尾创建一个节点执行。分配节点的代码错误。它应该创建一个节点,为其留出一些空间,然后返回 #include<stdio.h> #include<stdlib.h> struct node { int num;

我肯定我在某个地方搞砸了。问题是头指针没有得到memAlo()fn()分配的内存,但是如何到达那里?请帮助


我尝试的是创建一个包含从1到9的数字的单链接列表,并使用print()打印它们。实际上,AddNode()是每次在main()中的for循环时在链接列表的末尾创建一个节点执行。

分配节点的代码错误。它应该创建一个节点,为其留出一些空间,然后返回

#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();*/
}
这将创建一个指向节点的指针,正确分配它,然后返回它。

问题我看到:

  • 不处理空列表,即当
    head==NULL
  • 创建彼此不链接的节点

    curr=memAlo()

    为节点分配内存并将其返回给您,但它不会将节点与其他任何内容连接

  • 试试这个:

    struct node *memAlo() {
        struct node *nd = malloc(sizeof(*nd));
        return nd;
    }
    
    void addNode(内部编号){ 结构节点*temp=NULL; //处理一张空名单。 if(head==NULL) { head=memAlo(); 头部->数量=否; head->next=NULL; } //移动curr直到到达列表的最后一个节点。 curr=头; while(当前->下一步!=NULL){ 当前=当前->下一步; } temp=memAlo(); if(temp==NULL){ printf(“\n内存向上\n”); 返回; } 否则{ //将新节点链接到上一个节点。 温度->数值=否; temp->next=NULL; printf(“%d\n”,temp->num); 当前->下一步=温度; } }
    似乎由于
    head
    最初是
    NULL
    ,然后您开始分配节点而不保存第一个节点的地址,因此您丢失了第一个节点的地址,然后无法从头开始遍历列表

    你注释掉的部分说明了这个问题


    作为旁注,您的程序中没有
    空闲
    。请记住始终
    释放
    alloc
    设置的
    head=NULL
    的内存。在您第一次定义
    head
    的位置,我们在您的程序中的任何位置都不会看到
    head
    位于
    =/code>的左侧gram.所以当然
    head
    总是等于
    NULL
    而不是其他任何东西

    您可能希望在
    addNode
    函数的开头插入一些代码,以测试该点的
    head==NULL
    ;如果这是真的,您将希望分配
    memAlo()的结果
    头部
    而不是
    当前
    。您还必须调整一些其他逻辑。

    #包括
    void addNode(int no){
        struct node* temp = NULL;
    
        // Deal with an empty list.
        if ( head == NULL )
        {
           head = memAlo();
           head->num = no;
           head->next = NULL;
        }
    
      // Move curr until we reach the last node of the list.
      curr = head;
      while(curr->next != NULL){
        curr = curr->next;
      }
      temp = memAlo();
      if(temp == NULL){
        printf("\nmemory up\n");
        return;
      }
      else{
        // Link the new node to the previous last node.
        temp->num = no;
        temp->next = NULL;
        printf("%d\n",temp->num);
        curr->next = temp;
      }
    }
    
    #包括 结构节点 { int-num; 结构节点*下一步; }; 结构节点*head,*curr; 结构节点*pos; void addNode(int n) { if(head==NULL) { head=(结构节点*)malloc(sizeof(结构节点)); 头部->数量=n; head->next=NULL; curr=头; } 其他的 { while(curr!=NULL) { pos=当前; 当前=当前->下一步; } curr=(结构节点*)malloc(sizeof(结构节点)); curr->num=n; 当前->下一步=空; pos->next=当前; } } 作废打印列表() { curr=头; while(curr!=NULL) { printf(“%d”,curr->num); 当前=当前->下一步; } } int main() { head=NULL; curr=头; int i,a[]={4,5,1,2,3,9,0};
    对于(i=0;i)您的问题描述非常模糊。从您的描述中不清楚发生了哪些不应该发生的事情,哪些不应该发生。
    #include<stdio.h>
    #include<stdlib.h>
    
    struct node
    {
      int num;
      struct node *next;
    };
    
    struct node *head, *curr;
    struct node *pos;
    
    void addNode(int n)
    {
      if(head==NULL)
      {
        head = (struct node*)malloc(sizeof(struct node));
        head->num = n;
        head->next = NULL;
        curr = head;
      }
      else
      {
        while(curr != NULL)
        {
          pos = curr;
          curr = curr->next;
        }
        curr = (struct node*)malloc(sizeof(struct node));
        curr->num = n;
        curr->next = NULL;
        pos->next = curr;
      }
    }
    
    void printList()
    {
      curr = head;
      while(curr != NULL)
      {
        printf("%d",curr->num);
        curr = curr->next;
      }
    }
    
    int main()
    {
      head = NULL;
      curr = head;
      int i, a[] = {4,5,1,2,3,9,0};
      for(i=0;i<7;i++)
      {
        addNode(a[i]);
      }
      curr = head;
      printList();
    }