c - 如何在 C 中正确释放 char**

标签 c pointers

我真的对这个二维字符数组感到困惑

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/

相关文章:

c - 显示随机生成的整数的频率

c - C 程序中的指针

c - warning_cast.c : In function ? fn_print? : warning_cast. c:5:警告:从不同大小的整数转换为指针

C99 不是 GCC 的默认 C 版本?

c++ - 为什么不允许指针+指针,但允许指针+整数?

c++ - N 不命名类型

c++ - 我将如何在进程的内存中搜索特定字符串?

c - 使用 C 中的位显示卡片的值

c - 了解汇编中的 C 程序

c++ - 如何只读入特定数量的字符