我真的很困惑这个二维字符数组如何正确释放字符**用C
char **arg = malloc(sizeof(char*) * argc)
for (int i = 0; i < argc; i++)
arg[i] = malloc(sizeof(char) * size)
...
...
现在假设经过一系列的操作,我忘了变量的argc,我怎么能释放那些记忆? 我可以做这样的事吗?在所有情况下,这绝对正确吗?
char **tmp = arg;
while (*tmp != NULL){
free(*tmp);
tmp++;
}
free(arg);
数组不是NULL,只对字符串有效(char *在C中) – John
实际上为char *数组分配内存,然后为数组中的每个项分配内存。你必须先释放物品然后释放它自己的阵列。 – milevyo
这实际上并不是一个坏主意,但你应该在数组的末尾明确地加上NULL。我在很多情况下都使用它,这很好。 –