我有这段代码:
...
#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]
转换为指针
还在那里......有人可以解释一下为什么吗?以及如何改变它?
答案 0 :(得分:3)
我的猜测是,您发布的代码并不能准确反映您的翻译单元(或单位)的真实结构。显然,实际上您的gcMalloc
函数要么在之后定义,要么对其进行调用,要么甚至在不同的翻译单元中定义。
同时,在通话时
token.data = (char *) gcMalloc( sizeof(char) );
gcMalloc
函数是完全未知的(未声明,未定义),这使得编译器假定它返回int
。因此,有关尝试将32位int
值转换为char *
类型的64位指针的警告。
在尝试调用之前,您必须确保gcMalloc
函数已声明 。这就是您gcMalloc
的声明可能是
void *gcMalloc(int dataSize);
如果您的程序包含多个翻译单元,则此类声明通常放在头文件中,并包含在需要它们的每个翻译单元的最顶层。
摆脱演员阵容。您在代码中使用的所有演员都不是必需的。看起来您添加这些强制转换是徒劳的尝试,以抑制诊断消息,指出代码中存在严重问题。