Deklarasi implisit yang tidak kompatibel dari fungsi built-in 'malloc'

155

Saya mendapatkan kesalahan ini:

peringatan: deklarasi implisit yang tidak kompatibel dari fungsi built-in 'malloc'

Saya mencoba melakukan ini:

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

Hanya untuk referensi, struct yang digunakan adalah:

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

Saya tidak melihat ada yang salah dengan apa yang saya lakukan. Saya hanya membuat tempListdengan ukuran 1 x fileinfo_list.

SGE
sumber

Jawaban:

340

Anda mungkin lupa memasukkan <stdlib.h>.

cnicutar
sumber
1
ahh terima kasih :) masih memahami C, program C pertama yang berasal dari java :)
SGE
setelah memasukkan <stdlib.h>peringatan itu diganti oleh kesalahanerror: conflicting types for 'malloc'
Christos Karapapas
46

Anda harus melakukannya #include <stdlib.h>. Kalau tidak, itu didefinisikan sebagai int malloc()yang tidak kompatibel dengan tipe bawaan void *malloc(size_t).

Omri Barel
sumber
ketika didefinisikan sebagai int malloc(), apakah itu mereplikasi void *malloc(size_t)?
user1343318
@ user1343318 Belum tentu, yang merupakan alasan untuk peringatan itu. Contoh: platform x64 dengan pointer data 64-bit dan nilai 32-bit intakan memuntahkan kotoran kambing, sementara x86 32bit-data-pointer / 32bit- inttampaknya dapat bekerja dengan benar. Tidak ada yang benar, karena dalam kedua kasus tidak kompiler menyadari apa yang mallocsebenarnya kembali, dan menganggap intsebagai respons.
WhozCraig
15

Kamu hilang #include <stdlib.h>.

Antti
sumber
4

File stdlib.h berisi informasi header atau prototipe dari fungsi malloc, calloc, realloc dan gratis.

Jadi untuk menghindari peringatan ini di ANSI C, Anda harus memasukkan file header stdlib.

santosh sahu
sumber
-4

Satu-satunya solusi untuk peringatan tersebut adalah dengan memasukkan stdlib.h dalam program.

pengguna3828152
sumber