指针悬挂~实例解释

指针悬挂:
          指针在释放之后,没有设置为NULL。使得指针仍然指向原地址。
          多个指针指向同一对象时,释放其中一个指针,并设置为null,其他的指针仍然成为了悬挂指针。


危    害:通过悬挂指针读写内存,信息泄露


代码测试实例:  
#include<stdio.h>
#include<malloc.h>
int main()
{
        int *p1=(int*)malloc(sizeof(int));
        int *p2,*p3;
printf("address p1 point to:%x",p1);  //输出 指针p1所指向的内存地址 假设为:0x00318b50
*p1=618;   //给p1所指的内存地址赋值
printf("\n*p1 value:%x",*p1);  //输出p1所指的内存地址中存储的数据 即618(dec)
p2 = p1;   //指针p2指向p1所指的内存地址,即多指针指向同一对象
        printf("\naddress p2 point to:%x",p2); //输出 指针p2所指向的内存地址,也为:0x00318b50
free(p1);  //释放指针p1
printf("\nfree p1\n");
printf("\naddress p1 point to:%x",p1); //此时p1即为悬挂指针 即使释放了仍然可以正常输出指针p1所指向的内存地址:0x00318b50
        printf("\naddress p2 point to:%x",p2); //同时p2也成为悬挂指针 输出 指针p2所指向的内存地址,也为:0x00318b50
p1=NULL;     //设置p1为空 
        // printf("\n set p1 with null\n");
        printf("address p2 point to:%x",p2); //此时,p2仍然为悬挂指针 输出 指针p2所指向的内存地址,也为:0x00318b50
p3=(int*)malloc(sizeof(int));        //分配一个int 4字节的空间。并由指针p3指向次内存空间
*p3=22;    //给p3所指的内存地址赋值
printf("\naddress p3 point to:%x",p3); //输出 指针p3所指向的内存地址 此时,系统将刚才所释放的p1原指向的内存空间分配给了p3,即内存地址:0x00318b50
printf("\n*p2 value:%x",*p2); //此时测试输出p2指向的内存地址的值:22,即为p3指向的内存地址的值(内存信息泄露)
printf("\n*p1 value:%x",*p1); //此时测试输出p1指向的内存地址的值。由于p1被设置为null,已经不能被使用,因此此处会引起程序异常终止。
        return 0;


}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值