gpt4 book ai didi

c - malloc : cast to pointer from integer of different size [-Wint-to-pointer-cast]

转载 作者:行者123 更新时间:2023-11-30 20:06:14 27 4
gpt4 key购买 nike

我有这段代码:

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

但是错误

warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

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

最佳答案

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

同时,在通话时

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

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

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

void *gcMalloc(int dataSize);

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

并摆脱 Actor 阵容。您在代码中使用的任何强制转换都不是必需的。看起来您添加这些转换的目的是徒劳地尝试抑制指出代码中严重问题的诊断消息。

关于c - malloc : cast to pointer from integer of different size [-Wint-to-pointer-cast],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26288155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com