【问题标题】:Freeing dynamically allocated memory in C在 C 中释放动态分配的内存
【发布时间】:2018-01-01 19:11:38
【问题描述】:

回到我几年前写的一些 C 代码,我觉得它应该是内存泄漏,但我找不到任何迹象,我想检查一下我的假设。

我有这样的结构:

struct BitArray {
   ....
   char *bits;
   ....
}

bits 是这样动态分配的:

bArray->bits = (char *)calloc(1, 1 << shiftNumber);

free-ed 是这样的:

free(nextBA->bits);

但是那不应该泄漏内存吗?即它只会freebits指向的第一个char?以这种方式分配的内存free的正确方法是什么?

【问题讨论】:

    标签: c memory-leaks malloc


    【解决方案1】:

    不,它不会泄漏内存。事实上,这一切都很好。

    您正在传递一些先前由内存管理函数传递的东西(此处为calloc)。所以没关系。

    来自standard 7.22.3.1的注意

    free函数使ptr指向的空间变为 已解除分配,即可供进一步分配使用。如果 ptr 是 空指针,不发生任何动作。 否则,如果参数不 匹配内存管理函数之前返回的指针,或 如果空间已通过调用 free 或 realloc 释放,则 行为未定义。

    这里肯定不是这样。所以没关系。

    它只会释放 bits 指向的第一个字符?

    不,它会free分配的块。

    你所做的就是正确的方法。

    【讨论】:

    • 谢谢,最近写了太多 C++ :-)
    • 用 C++ 编写的内容与它有什么关系?如果你以这种方式在 C++ 中使用calloc()free(),同样的答案也适用。
    • 因为现代 C++ 都是关于传递引用而不是新/删除
    猜你喜欢
    • 2013-11-22
    • 2023-03-03
    • 2013-01-27
    • 2017-06-13
    • 2011-03-17
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多