释放指针指向的所有内存space?
Deallocating all memory space that the pointer to pointer points to?
我对释放指针指向的所有内存space感到困惑。
比如有一个指向指针的指针如下:
int **p; // +-----+ +-----+ +-----+-----+-----+
p = malloc(sizeof(int*)); // | p |----->| |----->| | | |
*p = calloc(3, sizeof(int)); // +-----+ +-----+ +-----+-----+-----+
据我所知,释放所有内存 space 的正确方法是
free(*p);
free(p); // The order is unchangeable.
void free (void* ptr)
释放ptr
指向的内存space,但是p是指向指针的指针,所以为什么不用free((void*)p)
释放内存[=15] =] 而不是使用 free(p)
?
void *
是通用指针,即它可以指向任何指针类型。无需投 p
.
"So why not use free((void*)p)
to deallocate memory space instead of using free(p)
?"
因为p是一个指针。一个指针到一个指针,我给你。但是一个指针都是一样的!
如果你有一个用来装盒子的盒子,它仍然是一个盒子。一个盒子的盒子。
如果规则是 "All pointer types can be implicitly cast to void*
unless they point to a pointer type"!
那就太奇怪了
我对释放指针指向的所有内存space感到困惑。
比如有一个指向指针的指针如下:
int **p; // +-----+ +-----+ +-----+-----+-----+
p = malloc(sizeof(int*)); // | p |----->| |----->| | | |
*p = calloc(3, sizeof(int)); // +-----+ +-----+ +-----+-----+-----+
据我所知,释放所有内存 space 的正确方法是
free(*p);
free(p); // The order is unchangeable.
void free (void* ptr)
释放ptr
指向的内存space,但是p是指向指针的指针,所以为什么不用free((void*)p)
释放内存[=15] =] 而不是使用 free(p)
?
void *
是通用指针,即它可以指向任何指针类型。无需投 p
.
"So why not use free((void*)p)
to deallocate memory space instead of using free(p)
?"
因为p是一个指针。一个指针到一个指针,我给你。但是一个指针都是一样的!
如果你有一个用来装盒子的盒子,它仍然是一个盒子。一个盒子的盒子。
如果规则是 "All pointer types can be implicitly cast to void*
unless they point to a pointer type"!