如果您要执行以下操作:
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/