2014-02-07 8 views
1

나는 listlist_elem 구조체를 실제 C 라이브러리와 매우 비슷한 (버그 목록이없는) 헤더를 가진 프로젝트에서 작업하고있다. 나는리스트의 구현을 사용하는 소스 파일을 쓰고 있어요 나는 다음과 같은 경고가 나타납니다 이것은 list_elem 구조의 선언이빌트인 malloc C 암시 적 선언

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

입니다 내가 여기에 사용

/* 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> 

하고 <stdlib.h>malloc가 암시 적으로 선언되고 있다는 컴파일러 경고 메시지를 가져옵니다 코드 전에 포함되지 않은 것이 거의 확실하다 목록

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

"malloc 스레드를 사용하지 마십시오."- http://stackoverflow.com/questions/605845/do-i -cast-of-malloc 결과 – Jimbo

+0

malloc을 가장 많이 캐스팅하지 마십시오 – KRUKUSA

+3

암시 적 선언은 컴파일러가'malloc'에 대한 선언을 보지 못했다는 것을 의미합니다 ...이 문장 앞에'stdlib.h' defo가 포함되어 있습니까? (나는 네가 그렇게했다고 말한 것을 알고 있지만, 두 번 체크할만한 가치가 있을지도 모른다.) – Jimbo

답변

6

를 정의 또한 헤더. 당신은 다음과 같은 상황을 찾아야한다 :

  • #include <stdlib.h> 조건부 코드 (때문에 프리 프로세서 문 같은 #if, #elif, 또는 #else에) 표시 실제로 포함되어 있지 않습니다.
  • 경고를받는 줄이 <stdlib.h>이 포함 된 줄보다 빠릅니다.
  • 당신이 생각하는 소스 파일을 컴파일하지 않습니다.
  • 편집기 버퍼의 내용을 디스크에 저장하지 않았기 때문에 컴파일중인 파일의 버전이 이전 버전이되어 편집기에서 볼 수 없습니다. <stdlib.h> 포함하기 전에
  • 은 (가능성 #undef<stdlib.h> 후이 포함되어 있습니다. (이 드물지만 수 있습니다.)

이러한 오류 여부를 공개하지 않는 다른 뭔가 malloc을 대체하는 #define있다 문제를 short, self-contained compilable example으로 줄여야합니다. 이렇게하면 문제가 해결 될 수 있습니다.