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