内置函数“malloc”的隐式声明不兼容

179

我遇到了这个错误:

警告:内置函数‘malloc’的不兼容隐式声明

我正在尝试做这件事:

fileinfo_list* tempList = malloc(sizeof(fileinfo_list));

仅供参考,此处使用的结构体如下:

typedef struct {
    fileinfo** filedata;
    size_t nFiles;
    size_t size;
    size_t fileblock;
} fileinfo_list;

我认为我的操作没有问题。我只是创建了一个大小为 1 x fileinfo_listtempList


3
可能是重复的问题:为什么每次使用malloc时都会收到警告? - Oded
5个回答

400
您可能忘记了包含 #include <stdlib.h>

1
啊,谢谢 :) 还在逐渐掌握C语言,第一个C程序是从Java转过来的 :) - SGE
1
在包含了 <stdlib.h> 后,警告被替换为错误 error: conflicting types for 'malloc' - Christos Karapapas

48

你需要添加 #include <stdlib.h>。否则它会被定义为 int malloc(),这与内置类型 void *malloc(size_t) 不兼容。


当它被定义为 int malloc() 时,它是否复制了 void *malloc(size_t) - user1343318
@user1343318 不一定,这正是警告的原因。例如:一个具有64位数据指针和32位“int”值的x64平台将会出现错误,而一个x86 32位数据指针/32位“int”似乎可以正常工作。两者都不正确,因为在这两种情况下,编译器都不知道“malloc”实际返回什么,并假设返回“int”。 - WhozCraig

16
您缺少了#include <stdlib.h>头文件。

5

stdlib.h文件包含malloc、calloc、realloc和free函数的头信息或原型。

因此,在ANSI C中避免这个警告,您应该包含stdlib头文件。


-4
唯一解决这些警告的方法是在程序中包含stdlib.h。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接