首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铸造空洞指针

铸造空洞指针
EN

Stack Overflow用户
提问于 2010-08-07 05:50:50
回答 2查看 449关注 0票数 0

可能的重复: 我投马洛克的结果了吗? 应该显式地转换malloc()的返回值吗?

你好,

gcc 4.4.4 c89

通常,我不会从malloc调用中转换返回结果。

代码语言:javascript
复制
int *int_ptr = NULL;
int_ptr = malloc(sizeof(int));

然而,我在这里读过,如果你抛出它可以隐藏错误。如果显式转换为int,它如何隐藏错误?

代码语言:javascript
复制
int_ptr = (int*)malloc(sizeof(int));

另外,我读了一本c编程书,书中说从一个空指针(包括malloc的调用)进行转换是很好的编程实践。

哪个是好的编程实践?

代码语言:javascript
复制
int *int_ptr = NULL;
void *ptr = NULL;

int_ptr = ptr;

代码语言:javascript
复制
int_ptr = (int*)ptr;

非常感谢你的建议,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-07 08:35:57

如果显式转换为int,它如何隐藏错误?

它可以隐藏在调用stdlib.h之前忽略包含malloc的错误。如果没有正确的函数声明,C编译器可以假设它返回一个int,而显式强制转换将掩盖您没有正确调用malloc这一事实。参见comp.lang.c常见问题中的Q7.6Q7.16

另外,我读了一本c编程书,书中说从一个空指针(包括malloc的调用)进行转换是很好的编程实践。 哪个是好的编程实践?

在C中显式地转换malloc的结果是没有意义的,它可能会掩盖错误,并且会增加维护负担(如果您决定更改分配的类型,那么现在代码中有一个必须更改的额外站点)。

只有在从void*执行显式强制转换时,才需要将代码编译为C++,因为C++不允许将其作为隐式强制转换。(但如果您正在编写C++代码,则应该在本例中使用static_cast。)

票数 3
EN

Stack Overflow用户

发布于 2010-08-07 06:03:33

不要转换void*malloc()的返回值,除非它是为了让GCC在你的环境中保持安静,或者如果它是由同事授权的,等等。

无论是否强制转换,void*只是一个内存地址。将其赋值给带有类型的变量会给它带来意义,避免转换会使代码更容易阅读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3429288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档