Khai báo ngầm không tương thích của hàm tích hợp 'malloc'


155

Tôi đang gặp lỗi này:

cảnh báo: khai báo ngầm không tương thích của hàm tích hợp 'malloc'

Tôi đang cố gắng để làm điều này:

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

Chỉ để tham khảo cấu trúc được sử dụng trong tay là:

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

Tôi không thấy có gì sai với những gì tôi đã làm. Tôi chỉ đang tạo một tempListvới kích thước 1 x fileinfo_list.


Câu trả lời:


340

Bạn có thể quên bao gồm <stdlib.h>.


1
ahh cảm ơn :) vẫn nhận được hang C, chương trình C đầu tiên đến từ java :)
SGE

sau khi bao gồm <stdlib.h>cảnh báo đã được thay thế bằng một lỗierror: conflicting types for 'malloc'
Christos Karapapas

46

Bạn cần phải #include <stdlib.h>. Mặt khác, nó được định nghĩa int malloc()là không tương thích với loại tích hợp void *malloc(size_t).


Khi nó được định nghĩa là int malloc(), nó sao chép void *malloc(size_t)?
dùng1343318

@ user1343318 Không nhất thiết, đó chính xác là lý do cảnh báo. Ví dụ: một nền tảng x64 với các con trỏ dữ liệu 64 bit và các intgiá trị 32 bit sẽ đánh bại phân dê, trong khi một con trỏ dữ liệu x86 32 bit / 32 bit- intdường như có thể hoạt động chính xác. Cả hai đều không đúng, vì trong cả hai trường hợp, trình biên dịch đều nhận thức được những gì mallocthực sự trả về và giả định inttrong phản hồi.
WhozCraig


4

Tệp stdlib.h chứa thông tin tiêu đề hoặc nguyên mẫu của các hàm malloc, calloc, realloc và miễn phí.

Vì vậy, để tránh cảnh báo này trong ANSI C, bạn nên bao gồm tệp tiêu đề stdlib.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.