一直想不明白的一个有关问题:动态指针先delete再赋为零值,与直接赋为零值有区别吗
一直想不明白的一个问题:动态指针先delete再赋为零值,与直接赋为零值有区别吗?
如题所示。比如
这样会不会有问题?
------解决思路----------------------
之后如果继续使用p,立马崩溃
之后如果不使用p,内存泄露
------解决思路----------------------
有区别的,new分配的内存在堆上面,应该由程序员自己去释放,如果不delete就会一直处于分配状态,
那么程序就会一直无法重复使用到这块内存,内存泄漏就是这么来的,我们把该指针赋值为空的目的,是
为了使指针不再指向释放了的内存,这样可以保证不会误用释放掉了的内存。
------解决思路----------------------
马戏团的笼子里养着老虎,演出时交给 驯兽员
现在马戏演完了,老虎要关回笼子里
然后驯兽员手里 就没老虎了
如果,驯兽员直接把老虎放了,手里也一样没有老虎
马戏团就。。。。。,大街行人也,,,,
------解决思路----------------------
new了不delete内存泄漏.
指定赋值为NULL的目的是避免野指针, 让后面使用的地方知道这个指针指向的空间已经释放
------解决思路----------------------
你直接赋值为0,可是之前指针所批的内容还在,系统仍为你的程序保留着之前所批的那块内存,这部分内存你不用了,但其他程序也用不了,也就是内存泄漏了,动态分配的内存需要自己释放,静态分配的内存可以不用释放
------解决思路----------------------
那只是个交换,那块内存有代码用着,有指针持有,
而不是没有用指针持有,只不过换了地方。
------解决思路----------------------
堆空间泄露。 小程序没问题。 要是像QQ那种大程序你这么搞你就死定了。
如题所示。比如
int *p=new int();
*p = 42;
p = nullptr;
这样会不会有问题?
------解决思路----------------------
之后如果继续使用p,立马崩溃
之后如果不使用p,内存泄露
------解决思路----------------------
有区别的,new分配的内存在堆上面,应该由程序员自己去释放,如果不delete就会一直处于分配状态,
那么程序就会一直无法重复使用到这块内存,内存泄漏就是这么来的,我们把该指针赋值为空的目的,是
为了使指针不再指向释放了的内存,这样可以保证不会误用释放掉了的内存。
------解决思路----------------------
马戏团的笼子里养着老虎,演出时交给 驯兽员
现在马戏演完了,老虎要关回笼子里
然后驯兽员手里 就没老虎了
如果,驯兽员直接把老虎放了,手里也一样没有老虎
马戏团就。。。。。,大街行人也,,,,
------解决思路----------------------
new了不delete内存泄漏.
指定赋值为NULL的目的是避免野指针, 让后面使用的地方知道这个指针指向的空间已经释放
------解决思路----------------------
你直接赋值为0,可是之前指针所批的内容还在,系统仍为你的程序保留着之前所批的那块内存,这部分内存你不用了,但其他程序也用不了,也就是内存泄漏了,动态分配的内存需要自己释放,静态分配的内存可以不用释放
------解决思路----------------------
那只是个交换,那块内存有代码用着,有指针持有,
而不是没有用指针持有,只不过换了地方。
------解决思路----------------------
堆空间泄露。 小程序没问题。 要是像QQ那种大程序你这么搞你就死定了。