警告:即使包含<stdlib.h>,也会出现函数“malloc”的隐式声明

4
这是一段代码片段,我在其中使用一个数组的元素来填充列表。
#include <stdlib.h>
#include <stdio.h>
#include "../../lib/kernel/list.h"
#include "./listpop.h"

struct item {
    struct list_elem elem;
    int value;
    int priority;
};

void populate(struct list * l, int * a, int n);

void populate(struct list * l, int * a, int n)
{
  int i = 0;
  while(i != n) {
    struct item * newitem = malloc(sizeof(struct item));
    newitem->value = a[i];
    list_push_back(l,newitem);
    i++;
  }
}

void test_assignment_1()
{   struct list our_list;
    list_init(&our_list);
    populate(&our_list, ITEMARRAY, ITEMCOUNT);
}

list.h中的代码:

/* List element. */
struct list_elem 
{
  struct list_elem *prev;     /* Previous list element. */
  struct list_elem *next;     /* Next list element. */
};

/* List. */
struct list 
{
  struct list_elem head;      /* List head. */
  struct list_elem tail;      /* List tail. */
};

void list_init (struct list *);

list.c中的代码:

/* Initializes LIST as an empty list. */
void
list_init (struct list *list)
{
  ASSERT (list != NULL);
  list->head.prev = NULL;
  list->head.next = &list->tail;
  list->tail.prev = &list->head;
  list->tail.next = NULL;
}

最后,listpop.h 文件中的代码如下:
#define ITEMCOUNT 10
int ITEMARRAY[ITEMCOUNT] = {3,1,4,2,7,6,9,5,8,3};

以下是我的警告:

warning: 隐含声明函数‘malloc’

warning: 不兼容的内建函数‘malloc’的隐含声明

到目前为止,我读到的关于这些警告的所有信息都是添加stdlib.h库,但是从我的代码中可以看出,我已经添加了,但仍然会给我这些警告。我已经多次重启了代码,所以错误肯定在代码中。

有人知道这里有什么问题吗?


1
请在您的问题中包含[mre]。我没有收到那些警告,但是我在未声明类型“struct list_elem”上收到了错误。最有可能的情况是您未展示给我们的代码中存在错误。 - Keith Thompson
1
你从一个更简单的例子中得到了相同的错误吗? - Nate Eldredge
1
你能告诉我你正在使用的编译器和版本吗? - Steve Friedl
3
你在编译前保存了文件吗?这是文件中精确的代码吗?因为它不应该表现出你所描述的那样。 - Eugene Sh.
我已经更新了代码,这是导致警告的行:../../tests/threads/assignment_1.c:21:33: - Kyle
显示剩余7条评论
1个回答

0

你可能正在使用一个过时的系统,带有不符合标准的编译器和/或C库。尝试在<stdlib.h>之外包含<malloc.h>,并始终首先包含标准头文件。


我在代码开头添加了 #include <malloc.h>,但是它给了我一个错误。 - Kyle
@Kyle:好的,那不是正确的解释。你是否将 #include <stdlib.h> 和其他标准头文件放在其他包含文件之前? - chqrlie
是的,它仍然给我<malloc.h>的错误。我正在虚拟机上运行代码。这可能是问题吗? - Kyle

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