【发布时间】:2015-06-25 09:54:15
【问题描述】:
据我从其他 SO 问题的答案中可以看出,我不需要像下面这样释放固定长度的数组:
unsigned char buffer[16];
但一般来说,每当调用malloc、memcpy 等时,都必须释放内存。
我的问题是:在以下情况下是否需要拨打free:
unsigned char buffer[16];
memcpy(buffer, source, 16);
...
free(buffer); // needed?
更准确地说:是使用堆还是栈,是基于变量的声明还是初始化?
【问题讨论】:
-
不,您不得释放这样的数组。说非静态局部变量具有自动存储持续时间是有原因的……另外,忘记“堆栈”和“堆”。 C 标准只为自动、静态和动态存储持续时间指定抽象语义。不需要使用堆栈和堆来实现它们。
-
你在哪里找到
memcpy的“必须释放内存”? -
@tivn 实际上我在这里弄错了。更新了问题,所以其他人不会学到错误的东西;)
-
基本上,您是在回答自己的问题:
buffer是来自malloc、calloc还是realloc?不。所以你不仅不必释放它,而且你可能不会释放它。
标签: c memory-management memory-leaks malloc free