为什么这里 delete [] intArr可以释放所以intArr所占用的内存
但是intArr=NULL; 就只是把局部变量的intArr的值置为空了。
如果把代码改成
把指针的地址传过来可以实现把全部的intArr的值置为NULL。
那么,我寻思delete [] intAr的时候不也没传地址吗,传的不也是一个值吗?
怎么delete的时候释放所有intNULL在堆中的内存地址,intArr=NULL就只是改变局部intArr的值呢?
我的意思是,在其他函数进行delete [] intNULL的时候,可以释放全局所有intArr的地址,但是为什么在intArr=NULL的时候,到了主函数,主函数的intArr仍然没有被置为空?
我是这样理解的:
delete [] intArr应该检测到的一个值,这个值是实参intArr所指向的地址,所以它最终释放了这个实参intArr的地址,
而intArr=NULL,只是把releaseIntArr这个函数里局部的intArr的值变成了NULL,它在处理的时候,把intArr当作为了一个值去处理,即使这个值是一个地址,
因为我并没有对这个实参intArr进行&取址,所以实参intArr传进来的都只是一个值,而不是一个地址,
但是delete就不一样,delete [] intArr里的intArr同样是一个值,但是delete 应该把intArr这个值里的地址检测到了,它估计就直接把这个地址不当作值了,直接当作一个地址,在堆里把这个地址释放了,因为delete是用来释放地址的,所以我估摸着delete是直接忽略了intArr是一个值,把值里面的地址取出来,然后在堆里释放了这个地址,所以delete[] intArr可以释放全局的intArr的地址占用,但是intArr=NULL却只是被把一个局部intArr的值置为NULL,不知道理解的有没有问题