gpt4 book ai didi

c - 在C中释放动态分配的内存

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:35 25 4
gpt4 key购买 nike

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

我有这样的结构:

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

bits 是这样动态分配的:

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

免费-ed 像这样:

free(nextBA->bits);

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

最佳答案

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

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

来自 standard 7.22.3.1小心

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if the argument does not match a pointer earlier returned by a memory management function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined.

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

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

不,它会释放分配的 block 。

您的做法是正确的。

关于c - 在C中释放动态分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com