組み込み関数「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;

私がやったことには何の問題もありません。tempList1 xのサイズのを作成していますfileinfo_list


回答:


340

含めるのを忘れた可能性があります<stdlib.h>


1
ああありがとう:)まだCのコツをつかんでいます、最初のCプログラムはjavaから来ています:)
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 2014年

@ user1343318必ずしもそうではありません。これがまさに警告の理由です。例:64ビットデータポインターと32ビットint値を備えたx64プラットフォームは、山羊の糞を吐き出しintますが、x86 32ビットデータポインター/ 32ビット-は、正しく動作しているように見えます。どちらも正しくありません。どちらの場合も、コンパイラはmalloc実際に何が返されるかを認識しておらずint、応答であると見なします。
WhozCraig、2015年


4

stdlib.hファイルには、malloc、calloc、realloc、およびfree関数のヘッダー情報またはプロトタイプが含まれています。

したがって、ANSI Cでこの警告を回避するには、stdlibヘッダーファイルをインクルードする必要があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.