【发布时间】:2018-11-10 01:06:51
【问题描述】:
我无法理解何时释放指向指针的指针。对于数组,我理解类似:
char **mat = (char**) malloc(sizeof(char*) * 100);
for(int i = 0; i < 500; i++)
mat[i] = (char*) malloc(sizeof(char) * 50);
需要
- 释放 mat 变量的每个 ith 成员,然后对其根(mat**)进行最终的免费调用。这在直觉上是有道理的,因为每个 malloc 都会获得一个免费的。
但是,当我这样做时:
char *str = (char *) malloc(100 * sizeof(char));
char **pstr = &str;
free(pstr);
我发现这告诉我我正在尝试释放无效指针。我的逻辑是如果pstr 是指向malloc'd 字符数组的指针的指针- 释放pstr 应该释放str。相反,我得到一个无效的指针。什么给了?
【问题讨论】:
-
花几个小时阅读更多关于 C 和 C memory management 的信息。您需要定义并遵循关于分配和内存释放的约定
-
malloc返回一个指针。你将那个指针传递(一个副本)到free。不是它的地址或其他任何东西。 -
你不释放指针(双精度或其他),你使用指针释放对象。