malloc:从不同大小的整数转换为指针[-Wint-to-pointer-cast]

时间:2014-10-09 21:25:59

标签: c pointers

我有这段代码:

...
#include <stdlib.h>
...

typedef struct tToken
{
    tState state;               //stav lexemu
    char *data;             //hodnota lexemu
    int row;                //radek lexemu
    int column;         //sloupec lexemu
}tToken;

tToken token;

...

void *gcMalloc(int dataSize){
    ...
    void *AllocatedData = (void*)malloc(dataSize);
    return AllocatedData;
}   

...

if(token.data == NULL)
    token.data = (char *) gcMalloc( sizeof(char) ); //there is the problem

但错误

  

警告:从不同大小的整数[-Wint-to-pointer-cast]

转换为指针

还在那里......有人可以解释一下为什么吗?以及如何改变它?

1 个答案:

答案 0 :(得分:3)

我的猜测是,您发布的代码并不能准确反映您的翻译单元(或单位)的真实结构。显然,实际上您的gcMalloc函数要么在之后定义,要么对其进行调用,要么甚至在不同的翻译单元中定义。

同时,在通话时

token.data = (char *) gcMalloc( sizeof(char) );

gcMalloc函数是完全未知的(未声明,未定义),这使得编译器假定它返回int。因此,有关尝试将32位int值转换为char *类型的64位指针的警告。

在尝试调用之前,您必须确保gcMalloc函数已声明 。这就是您gcMalloc的声明可能是

的声明
void *gcMalloc(int dataSize);

如果您的程序包含多个翻译单元,则此类声明通常放在头文件中,并包含在需要它们的每个翻译单元的最顶层。

摆脱演员阵容。您在代码中使用的所有演员都不是必需的。看起来您添加这些强制转换是徒劳的尝试,以抑制诊断消息,指出代码中存在严重问题。