bug fixed 系列之四 : 内存错误分析解决

  • 本文章为原创,欢迎交流,欢迎转载;转载请勿篡改内容,并且注明出处,谢谢!

    本节重点介绍程序中各种内存错误及其原因:

    空指针:

    空指针一般定义为NULL, 0 现代操作系统都会保留从0开始的一块内存,一旦程序访问了这块内存,系统就会触发一个异常; 

    问题1 为什么需要保留这样一块内存?

                 可以判断一个指针的有效性

    问题2:为什么不只保留一个字节的内存呢?

                一般内存管理都是按页进行管理的,无法单纯保留一个字节,至少保留一页,保留一页也有额外的好处,如检测诸如:

                p = NULL; p[1]之类的内存错误

    问题3:这块内存有多大?

                不同的OS,这块区域大小是不一样的,一般是一页的大小


    野指针:

    是指已经被释放的内存地址值;

    访问已经被释放掉内存,会引发系统异常,一般会导致程序crash

    被释放的内存可以被系统的内存分配器重新分配


    内存访问越界:分为读越界和写越界

    读越界:

            读取不属于自己地址空间的内存,

    后果:

            若所读的内存地址是无效的,则程序crash 若有效,由于读到的数据具有随机性,会产生不可预

           知的后果;

    写越界:(又称缓冲区溢出)

           写不属于自己地址空间的内存

    后果:

           可能会破坏别人的内存区域,而且所写入的数据对别人而言是随机的,会产生不可预料的后果


    引用未初始化的变量:

    使用未初始化的变量,因为这些值是随机的,所以会产生不可预知的后果;

    VC一类的编译器会把它们初始化为固定值,如0XCC.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值