就我对其他 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
是合理的。