gpt4 book ai didi

c - C 中的赋值错误

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

我有以下代码:

struct message_t *msg = ( struct message_t* ) malloc ( sizeof( struct message_t ) );
struct server_t *server = ( struct server_t* ) malloc ( sizeof( struct server_t ) );

server = network_connect( argv[ 2 ] );

函数network_connect返回一个struct server_t。但是我遇到了有争议的错误:

warning: assignment makes pointer from integer without a cast [enabled by default].

我不明白这个错误...首先我没有为我的指针 server_t 分配内存。好吧,我收到错误并尝试分配内存,但什么也没分配。我检查了代码network_connect,一切正常。

最佳答案

我的灵能力告诉我,你缺少 network_connect 的函数原型(prototype)(声明)函数——确保包含它所包含的头文件。

在 C 中,编译器允许隐式声明:当编译器看到以前从未见过的新函数名称(例如 network_connect )时,它假设它采用任意数量和类型的参数并返回 int 。因此,由于隐式函数声明,编译器认为您正在尝试从 int 进行转换。到 struct server_t* ,这会导致给定的警告。

您的代码中还存在内存泄漏 - 您正在为 server 分配内存。对象 malloc ,然后立即用 network_connect 返回的值覆盖该指针,这样您分配的内存就永远消失了。在这种情况下不需要分配任何内存,因为 network_connect直接返回其值。

最后,在 C 中,无需强制转换 malloc 的返回值。 malloc返回 void* ,而 C(但不是 C++)允许从 void* 进行隐式转换到任何其他指针类型。这里的强制转换只是不必要的额外冗长,并且它实际上可以隐藏错误 - 如果您忘记包含 <stdlib.h> ,然后使用malloc将使用返回 int 的隐式声明(见上文) 。强制转换将隐藏错误(您忘记包含 <stdlib.h> ),而没有强制转换则会向您发出警告。

关于c - C 中的赋值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103744/

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