我需要释放固定长度的char数组吗?

Seb*_*n S 6 c malloc free memory-leaks memory-management

据我所知,从其他SO问题的答案,我不需要释放固定长度的数组,如下所示:

unsigned char buffer[16];
Run Code Online (Sandbox Code Playgroud)

但一般来说,每当打电话时都必须释放内存malloc,的memcpy

我的问题是:我需要free在以下场景中打电话:

unsigned char buffer[16];
memcpy(buffer, source, 16);
...
free(buffer); // needed?
Run Code Online (Sandbox Code Playgroud)

更确切地说:根据变量的声明或初始化,决定是使用堆还是堆栈?

Iha*_*imi 16

你只free()指针返回由malloc()/ calloc()/ realloc(),传球不是由这些函数返回一个指针任何未定义行为.

在你分配数组的情况下

unsigned char buffer[16];
Run Code Online (Sandbox Code Playgroud)

一个函数内,数组会自动当它得到超出范围,函数返回即当matically释放.

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

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

上面的例子是一个很好的例子,证明-Wshadow使用gcc启用.


mat*_*ttm 6

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

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