关于野指针及指针所指内存被回收后的一些误区


我们是不是经常会有这样的疑问: 内存空间被回收是不是这块内存空间被清空了?何为野指针 ,怎样避免野指针?

//在堆内存申请一块内存 32位 4字节,64位 8字节 的空间 ,定义一个指针变量 p 指向这块空间

int * p = (int *)malloc(sizeof(int));

//给变量p所指的变量地址赋值

*p = 10;

// free(p)回收p所指的内存 注意 : 回收内存的空间,只是说这块空间可以再被利用了,并不是这块空间的数据被清空了,这块空间还储存的是10的变量。执行free(p)这一句代码后的p就是野指针;

free(p);

cout << "&p is ---- before"<< &p<<endl;

cout << "p is ---- before"<< p <<endl;

此时打印结果 :

&p is ---- before 0x7ffeefbff508

p is ---- before 0x102802d00

//此时的p指向的地址仍然是10所在的内存地址,但这块址已被回收了此时的p就是一个野指针 。 由此可见 野指针 :指向一个已被回收/释放的内存地址的指针

//为避免野指针,应该加上这一句

p = NULL ;

cout << "&p is ---- after "<< &p<<endl;

cout << "p is ---- after "<< p <<endl;

此时打印结果 :

&p is ---- after 0x7ffeefbff508

p is ---- after 0x0

些时p被赋为NULL,为一个空指针。

因为 p是定义的一个指针变量,是存在栈中的,函数没执行完 p的地址是不会被清空 &p的值才没有改变。

优质内容筛选与推荐>>
1、bootstrap的安装注意
2、elasticsearch 口水篇(4)java客户端 - 原生esClient
3、抓取网页并获取指定内容段
4、jsp页面数据回显(select下拉选择框)
5、可恨的搜狐,不爽的搜狗浏览器


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号