[英]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.