我真的对这个二维字符数组感到困惑
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);
最佳答案
没有
while(*tmp != NULL){
您可能会达到一个临界点,您将取消引用尚未分配的内存并触发未定义的行为。
或者按照建议,您可以显式地将 NULL
分配给最后分配的指针,在这种情况下它将起作用。
关于c - 如何在 C 中正确释放 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065236/