首页 文章

如何分配内存?

提问于
浏览
0

我试图在我的程序中创建一个链表,我无法使用malloc()为结构指针分配内存 . 如何在GCC中为变量分配内存?示例程序如下 . 如何让它在gcc中运行?

#include<stdio.h>
#include <alloc.h>
struct node
{

    int data;
    struct node * link;

};
void insert (struct node *p, int d)
{
    struct node *temp;
    temp = malloc(sizeof(struct node));
        temp->data=d;
    temp->link=NULL;

        if(p==NULL)
        {
            p=temp;
        }
        else{
        while(p->link!=NULL)
            p=p->link;

    p->link=temp;
        }
}
void disp(struct node *p)
{
    while(p!=NULL)
        {
        printf("%d\n",p->data);
        p=p->link;
        }


}

int main()
{

struct node *p;
p=NULL;
insert(p,7);
insert(p,9);
disp(p);

}

我遇到的错误是:

Line 18: error: alloc.h: No such file or directory
In function 'insert':
Line 13: warning: incompatible implicit declaration of built-in function 'malloc'

4 回答

  • 1

    malloc<stdlib.h> . 包括那个 .

    阅读该函数的手册页会给你这些信息 . 它不依赖于编译器 .

  • 2

    malloc<stdlib.h> 中声明,这就是你想要的 #include .

  • 1

    malloc的定义在 stdlib.h 文件中:

    #include <stdlib.h>
    

    而不是 alloc.h .

  • 7

    像其他人说:你的错误发生是因为你必须包括 stdlib.h 而不是 alloc.h

    要打印列表,您必须在 insert 中修改 p . 目前,每次拨打 insert 时,您都会传递 NULL . 以这种方式更改代码(将指针传递给 insert ):

    #include <stdio.h>
    #include <stdlib.h>
    struct node
    {
      int data;
      struct node * link;
    };
    
    /* note **p instead of *p */
    void insert (struct node **p, int d)
    {
      struct node *temp;
      temp = malloc(sizeof(struct node));
      temp->data=d;
      temp->link=NULL;
      if(*p==NULL)
      {
        *p=temp;
      }
      else{
        while((*p)->link!=NULL)
          *p=(*p)->link;
        (*p)->link=temp;
      }
    }
    
    void disp(struct node *p)
    {
      while(p!=NULL)
      {
        printf("%d\n",p->data);
        p=p->link;
      }
    }
    
    int main()
    {
      struct node *p;
      p=NULL;
      insert(&p,7);
      insert(&p,9);
      disp(p);
    }
    

    它会打印出来

    7
    9
    

相关问题