如何分配内存?

时间:2011-08-10 05:24:00

标签: c gcc memory-management

我正在尝试在程序中创建一个链表,我无法使用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 个答案:

答案 0 :(得分:7)

malloc位于<stdlib.h>。包括那个。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

#include <stdlib.h>

而不是alloc.h

答案 3 :(得分:1)

与其他人一样说:发生错误是因为您必须包含stdlib.h而不是alloc.h

要打印列表,您必须修改p中的insert。目前,每次拨打NULL时,您都会传递insert。以这种方式更改代码(将指针传递给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