C语言 我需要释放固定长度的字符数组吗?



据我从其他SO问题的答案中可以看出,我不需要像下面这样释放固定长度的数组:

unsigned char buffer[16];

但一般来说,每当调用malloc

memcpy 等时,都必须释放内存。

我的问题是:在以下情况下,我是否需要调用free

unsigned char buffer[16];
memcpy(buffer, source, 16);
...
free(buffer); // needed?

更准确地说:是使用堆还是堆栈的决定是基于变量的声明或初始化?

你只free()malloc()/calloc()/realloc() 返回的指针,传递任何未由这些函数之一返回的指针都是未定义的行为。

在分配数组的情况下,例如

unsigned char buffer[16];

在函数内部,数组将在超出范围时自动释放,即当函数返回时。

事实上,该数组仅在声明它的范围内有效

if (condition != 0)
 {
    unsigned char buffer[16];
 }
/* here it was already deallocated */

上面的例子是一个很好的例子,它证明了使用 GCC 启用-Wshadow是合理的。

如果堆栈上有数组,则不需要释放它;当堆栈帧弹出时,它将自动回收。

如果堆上有一个数组(使用 malloc 或类似函数分配),则需要显式释放。否则会出现内存泄漏。

不,您已在堆栈上分配了对象,因此不需要空闲。如果使用 malloc,则将在堆上分配内存,然后必须释放它。

相关内容

  • 没有找到相关文章

最新更新