繁体   English   中英

此代码是否会导致内存泄漏?

[英]Does this code cause memory leaks?

这里有人问有关||的问题 操作员。 他想知道为什么(j=3) || (i=3) (j=3) || (i=3)没有为i分配3。 那篇文章在这里: 确定C的打印

在我对该问题的第一个答案中,我给出了如何使用此“功能”的示例:

ptr = malloc(sizeof(*ptr)) || printf("Error\n");

是的,我知道应该将其打印到stderr,但这不是主题。 如果我没记错的话,我被告知该构造可能导致内存泄漏。 我很难相信,所以请向我解释。

并且有什么特殊的原因不使用这种结构吗? 除了给人以明显的“因为我可以”的印象外?

如果malloc失败,您将不会意识到。 相反,您会将printf的返回值(打印的字符数)视为内存地址,从而导致未定义的行为。

这比内存泄漏还糟。

通过始终将ptr分配给malloc的结果,可以在赋值中加上括号将解决此问题:

(ptr = malloc(sizeof(*ptr))) || printf("Error\n");

但是,如果分配失败,您仍然需要确保避免使用指针,因此不会为您节省太多代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM