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

时间:2015-04-18 13:23:07

标签: c memory-management memory-leaks malloc free

就我从其他SO问题的答案中可以看出,我不需要释放固定长度的数组,如下所示:

unsigned char buffer[16];

但一般来说,只要调用malloc memcpy 等,就必须释放内存。

我的问题是:我是否需要在以下情况中致电free

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

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

3 个答案:

答案 0 :(得分:15)

free() / malloc() / calloc()只返回realloc()个指针,传递任何未被其中一个函数返回的指针都是未定义的行为。

在您分配类似

的数组的情况下
unsigned char buffer[16];

在函数内部,当数组超出范围时,即当函数返回时,数组将被 auto 重新释放。

实际上,数组只在声明它的范围内有效

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

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

答案 1 :(得分:3)

如果数组在堆栈中,则不需要释放它;弹出堆栈框架时会自动回收它。

如果数组在堆上(使用malloc或类似函数分配),则需要明确释放。否则你有内存泄漏。

答案 2 :(得分:1)

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