在做数据结构的时候,遇到一个问题。
int* create() {
return (int*)malloc(8);
}
void removeP(int** p) {
if (*p == NULL) {
return;
}
free(*p);
*p = NULL;
}
int main() {
int* p;
p = create();
*p = 10;
*(p + 1) = 20;
removeP(&p);
return 0;
}
需要这么释放空间吗?因为在看数据结构的课程,老师在释放的时候,传递的是值,值中存放的是开辟的堆内存空间,在释放后,将形参中的值指向NULL,但是main中传递的是值,并不是指针的地址,所以改变的执行是函数形参的指向,main中指针的指向并未改变,指向还是堆地址,试了一下,还可以给堆空间赋值,就有点纳闷,直接改成了传址,这样将main中的指针指向也变成函数中的指向,指向NULL,这次在释放后,main中就彻底失去了堆空间内存地址