malloc:从不同大小的整数转换为指针[

我有这段代码:

...
#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]

仍然存在...有人可以解释我为什么吗? 以及如何改变它?


我的猜测是,您发布的代码并不能准确地代表您的翻译单位(或单位)的真实结构。 显然,实际上你的gcMalloc函数是在你调用它之后定义的,甚至是在不同的翻译单元中定义的。

同时,在通话的那一刻

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

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

您必须确保您的gcMalloc函数在您尝试调用它之前已经声明。 这就是你的gcMalloc的声明

void *gcMalloc(int dataSize);

如果您的程序由多个翻译单元组成,那么这些声明通常放在头文件中,并包含在需要它们的每个翻译单元的顶部。

摆脱演员阵容。 您在代码中使用的任何转换都不是必需的。 它看起来像你添加这些强制转换尝试压制诊断消息,指出代码中的严重问题。

链接地址: http://www.djcxy.com/p/28383.html

上一篇: malloc : cast to pointer from integer of different size [

下一篇: warning: cast from pointer to integer of different size