我真的很困惑這個二維字符數組如何正確釋放字符**用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。我在很多情況下都使用它,這很好。 –