【发布时间】:2017-04-19 00:24:40
【问题描述】:
我对以下代码感到困惑,有人可以帮我清理一下吗?
当我这样做时:
char *a = malloc(10);
char *c = a;
free(c);
它是释放 c 指针本身还是它指向的地址? (这是一个分配地址)。
或者它是否释放 a 指针并单独保留分配的地址?
【问题讨论】:
-
你没有释放 指针!而且您永远不会释放地址。
标签: c
我对以下代码感到困惑,有人可以帮我清理一下吗?
当我这样做时:
char *a = malloc(10);
char *c = a;
free(c);
它是释放 c 指针本身还是它指向的地址? (这是一个分配地址)。
或者它是否释放 a 指针并单独保留分配的地址?
【问题讨论】:
标签: c
你永远不会“释放指针”。这只是一个非常草率的速记,新用户可以轻松地从其他草率的前新用户那里获取所有内容,并且从不真正质疑。
您分配内存并释放内存。您谈论该内存的方式是通过指向它的指针,但内存是资源,而不是任何描述内存的指针。
既然您通过指针谈论内存,那么指针就是malloc 返回的内容和free 获取的内容,并且因为释放函数被称为动词“free”,并且释放函数接受指针,所以它是一个很容易在滑坡上误入歧途,开始谈论“释放指针”。说“拥有指针”是一个类似的错误;真正拥有的是对资源的责任。
【讨论】:
它释放了 c 指向的地址。你仍然可以使用指针'c',但这是危险的,你不应该这样做。
【讨论】:
c 寻址的内存(c 指向的内存)。