我对释放指针指向的所有内存空间感到困惑。
例如,有一个指向指针的指针如下:
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)
?
答案 0 :(得分:1)
void *
是通用指针,即它可以指向任何指针类型。无需投射p
。
答案 1 :(得分:0)
"那么为什么不使用free((void*)p)
来取消分配内存空间而不是使用free(p)
?"
因为p是一个指针。指针指向指针,我将授予您权限。但指针都一样!
如果你有一个装盒子的盒子,它仍然是一个盒子。盒子的盒子。
如果规则是&#34,那将是彻头彻尾的奇怪;所有指针类型都可以隐式地转换为void*
,除非它们指向指针类型"!