c - 在 C 中——在不同的上下文中释放内存

标签 c memory free

如果您要执行以下操作:

char array[2][5] = {"cars", "tags"}
char array2[] = "computer";

有一个隐式分配的内存分配等于(对于第一行):

sizeof(array); OR
sizeof(char*10); 

或者你想怎么做。

或者,可以这样做:

char *ptr = "cars";
char *ptr2 = malloc(sizeof(*ptr2)*5);
*ptr2 = "cars";

我知道,如果您使用指针来使用 malloc 显式分配内存,那么最好使用 free(ptr) 释放该指针;

但是,当您按上面的方式定义事物时,是否需要基于显式内存分配的相同理由进行以下调用?

free(ptr);
free(ptr2);
free(array);
free(array2);

-- 顺便说一句,上面所有的声明/初始化都是隐含的以 NULL 结尾的字符串,对吧?

最佳答案

您只需要free 分配给malloc 的内存,您指定的其他情况是指向试图释放的字符串文字或自动变量(通常分配在堆栈上)的指针它们是未定义的行为。

C 风格字符串以 NULL 终止。

此外,请务必注意:

*ptr2 = "cars";

语法不正确。

关于c - 在 C 中——在不同的上下文中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17882972/

相关文章:

c - 使用 GCC 编译 C 项目时使用了哪些默认库

c - C中链表函数的 append (添加到尾部)打印不正确(不打印最后 append 的元素)

c++ - 为什么不分配内存就能正常工作

c++ - 如何使用 shared_ptr 来管理已经引用计数的托管对象?

C - 使用带 ** 参数的函数释放结构的已分配内存

c - 为什么调用 execvp 时此 free 会失败?

c++ - Remy源码(github)protobuf类编译错误

c - 指针算术在数组外是否仍然有效?

c++ - 在C++中为类分配内存

c - 使用 malloc 释放在 c 中分配的空间