2014-02-07 2 views
1

Я работаю над проектом, в котором у меня есть заголовок, который определяет list и list_elem структуры, похожие на фактические библиотеки c (в реализации списков нет ошибок). Я пишу исходный файл, который использует реализацию списка, и я получаю следующее предупреждение:C неявное объявление встроенного malloc

warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration] 

Это декларация list_elem структуры

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

, который я использую здесь:

//creates a list element 
struct list_elem le_current; 
&le_current = (struct list_elem *)malloc(sizeof(struct list_elem)); 

Я знаю, что есть другой вопрос с той же проблемой, но в отличие от этого человека, я включил

#include <stdlib.h> 

, а также заголовок, который определяет списки

#include "lib/kernel/list.h" 
+2

Интерес может быть «dont cast malloc thread» - http://stackoverflow.com/questions/605845/do-i -cast-the-result-of-malloc – Jimbo

+0

больше не использовать malloc – KRUKUSA

+3

Неявное объявление подразумевает, что компилятор не видел объявления для 'malloc' ... является ли' stdlib.h' defo включенным перед этим утверждением? (Я знаю, что вы сказали, что сделали, но стоило бы дважды проверить). – Jimbo

ответ

6

Это практически уверено, что <stdlib.h> не включена перед кодом, который получает предупреждение компилятора, что malloc является неявным заявленным. Вы должны искать в следующих ситуациях:

  • #include <stdlib.h> появляется в условном коде (из-за заявления препроцессора, такие как #if, #elif или #else) и фактически не входит.
  • Линия, получающая предупреждение раньше, чем линия, которая включает <stdlib.h>.
  • Вы не компилируете исходный файл, который, как вы думаете.
  • Вы не сохранили содержимое буфера редактора на диске, поэтому версия файла, который компилируется, является старой, а не той, которую вы просматриваете в редакторе.
  • Перед <stdlib.h> включен, есть #define, который заменяет malloc с чем-то другим (и, вероятно, #undef после <stdlib.h> входит. (Это редко, но возможно.)

Если они не показывают ошибку, вы должны уменьшить проблему до short, self-contained compilable example.Проведение этого будет, скорее всего, осветить проблему.

Смежные вопросы