【发布时间】:2018-05-04 05:52:21
【问题描述】:
我有一个动态分配的 char 或其他类似的矩阵:
char **ptr;
ptr = (char**)malloc(sizeof(char*) * 3);
*ptr = (char*)malloc(4);
*(ptr + 1) = (char*)malloc(4);
*(ptr + 2) = 0;
如果我将释放矩阵的行而不释放指针的内存,例如
int i;
for(i = 0; i < 2; i++)
free(*(ptr + i));
将释放空指针之前最后一行之外的所有行,在这种情况下,仅释放 *ptr 行。 要释放最后一条,我们需要再添加一条指令
free(ptr);
问题是它是如何工作的,为什么我们不能只释放指针内存或只释放该矩阵的字符串内存?
【问题讨论】:
-
ericlippert.com/2014/03/21/find-a-simpler-problem 首先改用一个更简单的概念,即使用一个大小为 3 的指针到 char 的数组。习惯于分配和释放这三个指针。当它起作用时,将数组更改为一块分配的内存 - 如果它对于您的目标确实是必要的。顺便说一下,您可能想多解释一下代码的上下文。它有助于理解您的问题,从而帮助您。
-
如果我将释放最后一个指针 ptr + 2,它会在没有指令 free(ptr) 的情况下正常工作; ?
-
@Yunnosch,我做了 2 个小时才把问题放在堆栈上,我自己找不到解释
-
这是对我提议的回答吗?你和我的评论似乎毫无关联......
-
我说过关于您的链接,我非常了解其中的概念,代码上下文不存在,通常我想知道它是如何工作的以及为什么它会这样工作.
标签: c malloc free heap-memory