2014-09-09 2 views
-1


Может ли кто-нибудь сказать мне, что означает это предупреждение?
Что означает это предупреждение gcc?

s_sort.c: In function 'main': 
s_sort.c:15:15: warning: incompatible implicit declaration of built-in function 
'malloc' [enabled by default] 
A[i].name = malloc(MAXCHAR*sizeof(char)); 


Я пытаюсь выполнить следующий код. Платформа GCC 4.8.1 для Windows x64 (TDM-GCC). Проблема заключается в том, насколько я вижу в доступе к членам структуры.

#include <stdio.h> 
#define MAX 3 
#define MAXCHAR 100 

int main(){ 
    struct STUDENT 
    { 
     int studentID; 
     char* name; 
     char grade; 
    } A[MAX]; 
    int i; 

    printf("\n"); 
    for (i=0;i<MAX;i++) 
    { 
     A[i].name = malloc(MAXCHAR*sizeof(char)); 
    } 
    for (i=0;i<MAX;i++) 
    { 
     scanf("%d",&(A[i].studentID)); 
     scanf("%s",A[i].name); 
     scanf("%c",&(A[i].grade)); 
    } 
    printf("\n"); 
    for (i=0;i<MAX;i++) 
    { 
     printf("%d ",A[i].studentID); 
     printf("%s ",A[i].name); 
     printf("%c ",A[i].grade); 
     printf("\n"); 
    } 
    for (i=0;i<MAX;i++) 
    { 
     free(A[i].name); 
    } 
} 
+5

Вы забыли включить ' .' –

+0

+1 для того, чтобы не выдавать возвращаемое значение' malloc() 'и, следовательно, ловить ошибку! – pmg

+1

Для вашей информации эта конкретная проблема была тем, что создало целое [не отбрасывать результат обсуждения malloc] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) , Вы скомпилировали это как C90 или C99? Если вы это сделаете, вы можете получить разные предупреждения/ошибки. Старые компиляторы crappier C90 могут даже не давать предупреждения, но оставляют ошибку скрытой в вашей программе. – Lundin

ответ

4

Это значит, что компилятор не смог найти объявление вашего malloc. Поэтому он генерирует для вас объявление по умолчанию int malloc(...). Просто include <stdlib.h>.

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