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

时间:2017-07-02 02:40:56

标签: c malloc or-operator

此处有人询问了有关||运营商的问题。他想知道为什么(j=3) || (i=3)没有给我分配3。该帖子位于:Determining the print of C

在我对这个问题的第一个回答中,我给出了这个例子"功能"可以用:

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

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

是否有任何特殊原因不使用此构造?除了明显的"因为我可以"给它的印象?

1 个答案:

答案 0 :(得分:4)

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

这比内存泄漏更糟糕。

在作业周围添加括号将解决此问题,始终将ptr分配给malloc的结果:

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

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