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