释放指针指向的所有内存空间?

时间:2015-01-07 13:14:56

标签: c pointers

我对释放指针指向的所有内存空间感到困惑。

例如,有一个指向指针的指针如下:

int **p;                      //  +-----+      +-----+      +-----+-----+-----+
p  = malloc(sizeof(int*));    //  |  p  |----->|     |----->|     |     |     |
*p = calloc(3, sizeof(int));  //  +-----+      +-----+      +-----+-----+-----+

AFAIK,解除所有内存空间的正确方法是

free(*p);
free(p);   // The order is unchangeable.

void free (void* ptr)释放ptr指向的内存空间,但p是指向指针的指针,为什么不使用free((void*)p)来释放内存空间而不是使用free(p)

2 个答案:

答案 0 :(得分:1)

void *是通用指针,即它可以指向任何指针类型。无需投射p

答案 1 :(得分:0)

"那么为什么不使用free((void*)p)来取消分配内存空间而不是使用free(p)?"

因为p是一个指针。指针指向指针,我将授予您权限。但指针都一样!

如果你有一个装盒子的盒子,它仍然是一个盒子。盒子的盒子。

如果规则是&#34,那将是彻头彻尾的奇怪;所有指针类型都可以隐式地转换为void*,除非它们指向指针类型"!