指针是C/C++里面最难的东西了,很多人都会说:指针,想说爱你不容易。尽管我们日常一直在用,更多的时候都有一种提心吊胆的感觉。所以,就更需要我们多多注意了。直接上干货。
1.在c语言中,我们经常使用malloc去申请内存空间,c++中习惯用New申请内存,申请完之后,应该立即检查指针值是否为NULL,杜绝使用指针值为NULL的内存。
2.动态申请完内存后,必须成对出现释放,防止内存泄露。同时,用free或delete释放了内存之后,应立即将指针设置为NULL,防止产生"野指针“。
下面我们深入聊聊内存释放后,为什么需要将指针设置为NULL?
(1) 经过free和delete的指针到底发生了什么?
别被free和delete的名字的表面欺骗了,尤其是delete。free和delete其实只是把指针所指的内存给释放掉,但并没有把指针本身干掉。如下例子:
执行结果你会发现,两次输出的地址是一样的,但是两次取出来的数据是不一样的,第二个输出数据全是乱码。也就是说,指针p被释后其地址依旧是不变的,只是指针所指向的内存是垃圾数据。如果此时不把p设置为NULL,p就变成了"野指针",“野指针”的危害是不可估量的。
同时,这个也告诫我们,在free或delete掉指针后,用if(NULL != p)是不能起到防错作用的。
(2)有一个事实就是,函数体内的局部变量在函数结束时自动消亡。那指针呢?
如下函数,正在看这篇文章的你是不是也觉得是对的?理由一般也很简单,由于p是局部指针变量,p消亡的时候,指针所指的动态内存会一起完蛋。然而这是错局,这不是真的。我们会发现指针有一些奇怪的特征:
①指针消亡了,并不表示所指的内存会被自动释放;
②内存被释放了,并不表示指针会消亡或者指针变为NULL。
因此,在处理内存和指针的时候,不可以当做一件草率的事情来对待。
(3)再次强调杜绝"野指针","野指针"不是NULL指针,是指向"垃圾数据"的指针,"野指针"很危险,if语句对它不起任何作用。
每天进步一点点,每天消化一点点,关于指针还有更多的点需要关注,如果你对小编的文章感兴趣,点击一下关注吧,后续我会持续更新。如果你有更好的想法,欢迎一起交流。
本文暂时没有评论,来添加一个吧(●'◡'●)