c - 我需要释放固定长度的字符数组吗?

标签 c memory-management memory-leaks malloc free

<分区>

就我对其他 SO 问题的回答而言,我不需要像下面这样释放定长数组:

unsigned char buffer[16];

但一般情况下,无论何时调用mallocmemcpy等,都必须释放内存。

我的问题是:在以下情况下我是否需要调用 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 是合理的。

关于c - 我需要释放固定长度的字符数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29717970/

相关文章:

c++ - libcurl 是否能够通过 UDP 发送 http 消息?

C:函数不会循环运行并从文件中读取

c++ - ReadProcessMemory/WriteProcessMemory 是否访问程序数据或代码?

c - 内存中的程序及其内存映射

c# - 我应该使用 ReAllocHGlobal 还是 FreeHGlobal/AllocHGlobal?

ios - 关闭模态视图导致 CALayer retainCount 发送到释放

.net - 如何避免 .NET SSLStream 中的内存泄漏

jquery - jQuery AJAX 调用中的内存泄漏

c++ - 在 HP-UX、Solaris 或 AIX 上是否有任何 getifaddrs() 替代方案?

c - 防止相关函数中的内存泄漏