【问题标题】:does the following code in c produce a memory leak? [closed]c中的以下代码是否会产生内存泄漏? [关闭]
【发布时间】:2020-04-14 22:32:13
【问题描述】:

我想知道下面这段代码是否会产生内存泄漏:

m = malloc(5);
m = NULL;

【问题讨论】:

  • 你知道/适合malloc()的内存泄漏的定义是什么? malloc(5) 是否有机会返回,以及 NULL 以外的其他东西?
  • 这个问题给人的印象是“这是我的老师给出的内存泄漏示例。这是真的吗?”因此,这有点令人困惑,并且不能完全清楚您关注的是内存泄漏理论的哪个细节。你能解释一下哪些细节让你感到困惑吗?是什么让您认为/怀疑可能存在内存泄漏?另外,我同意灰胡子的问题。
  • @Yunnosch 有什么问题?我正在准备考试,这是我只想寻求帮助的一个问题。这是不允许的吗?
  • 是的,这是允许的,实际上很感激。但是应该问你的问题,以便可以回答。考虑一下我问“'A'中有元音吗?”。你会怎么回答?如果你回答“是”。那么您是否会觉得 Q/A 对有意义并且对其他人有帮助?你真的确定你理解了我的核心问题并回答了我非常困惑以至于我不得不在网上问的问题吗?
  • 稍微复杂一点,如果我问“'AYW` 中有辅音吗?”。那么你的答案是什么。回答“是”似乎很明显,但至少有一种语言(假设在用英语和拉丁字符集讨论时通常表示习惯),答案实际上应该是“否”,并澄清所述假设.这就是为什么我请你解释更多关于你的困惑的原因。

标签: c memory-leaks null


【解决方案1】:

是的,存在内存泄漏。 5 个分配的字节不再可访问,因为您没有指向它们的指针。

如果保存指针,您仍然可以使用和释放资源

unsigned char *m = malloc(5);
if (m) {
    unsigned char *p = m;
    m = NULL; // can no longer access the memory through m
    p[2] = 1; // but p is ok
    free(p);  // p is ok to free
} else {
    fprintf(stderr, "Problem! malloc failed!\n");
    exit(EXIT_FAILURE);
}

【讨论】:

  • @greybeard 5 个字节不重要。
  • @machine_1 该评论不是关于浪费 32 个字节。
  • @greybeard 我不是那个意思。我的意思是检查分配 5 个字节时是否失败。
  • @machine_1 在编程世界的相当大的部分中,5 个字节是如此重要,以至于对于这样的语句,您可能会失去工作。一旦你看到 50 个人工作了两个月来节省 10 字节的 RAM,你就会明白。
  • @machine_1:从初学者的状态就养成检查(大多数)库函数返回值的习惯是很好的......否则可能会发生人们不需要学习的情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多