การประกาศโดยนัยที่เข้ากันไม่ได้ของฟังก์ชันในตัว 'malloc'


155

ฉันได้รับข้อผิดพลาดนี้:

คำเตือน: การประกาศโดยนัยที่เข้ากันไม่ได้ของฟังก์ชันในตัว 'malloc'

ฉันพยายามทำสิ่งนี้:

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

สำหรับการอ้างอิงโครงสร้างที่ใช้ในมือคือ:

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

ฉันไม่เห็นอะไรผิดปกติกับสิ่งที่ฉันทำ ฉันแค่การสร้างtempListที่มีขนาด 1 fileinfo_listx


คำตอบ:


340

<stdlib.h>คุณอาจลืมที่จะรวมถึง


1
อ่าขอบคุณ :) ยังคงได้รับแฮงก์จาก C โปรแกรมแรกที่มาจากจาวา :)
SGE

หลังจากรวม<stdlib.h>คำเตือนถูกแทนที่ด้วยข้อผิดพลาดerror: conflicting types for 'malloc'
Christos Karapapas

46

#include <stdlib.h>คุณจำเป็นต้อง มิฉะนั้นจะถูกกำหนดว่าint malloc()ไม่เข้ากันกับชนิดในvoid *malloc(size_t)ตัว


เมื่อมันถูกกำหนดเป็นint malloc()มันจะทำซ้ำvoid *malloc(size_t)?
user1343318

@ user1343318 ไม่จำเป็นซึ่งเป็นเหตุผลสำหรับการเตือน ตัวอย่าง: แพลตฟอร์ม x64 ที่มีตัวชี้ข้อมูล 64 บิตและค่า 32 บิตintจะทำให้อุจจาระแพะในขณะที่ x86 32 บิต-data-pointer / 32bit- intดูเหมือนว่าจะทำงานได้อย่างถูกต้อง ไม่ถูกต้องเช่นในกรณีที่ไม่มีคอมไพเลอร์ตระหนักถึงสิ่งที่mallocผลตอบแทนจริงและถือว่าintในการตอบสนอง
WhozCraig


4

ไฟล์ stdlib.h มีข้อมูลส่วนหัวหรือต้นแบบของฟังก์ชัน malloc, calloc, realloc และฟังก์ชันอิสระ

ดังนั้นเพื่อหลีกเลี่ยงคำเตือนนี้ใน ANSI C คุณควรรวมไฟล์ส่วนหัว stdlib


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.