大白话说一说C++指针的非法访问

非AI生成,觉得有用,就请您帮忙点赞转发收藏吧,多谢看官。

目录

非法访问指针(access violation)的危害

非法访问指针的常见行为

1.野指针(wild pointer)

2.悬空指针(dangling pointer)

3.双重释放(double free)

4.越界访问(out-of-bounds access‌)

总结


  • 非法访问指针(access violation)的危害

        C++程序运行速度快,指针在这里面绝对是个大功臣,通过指针就能直接操作内存区域的数据,可以实现零开销抽象、零拷贝和高效数据结构。为了追求极致的运行速度,C++几乎舍弃了指针检查,如果每次访问指针都先检查指针是否合法,势必会影响程序的运行速度。C++太信任程序了,默认程序通过指针在访问合法的内存数据,也把指针检查交给了程序,但如果指针使用不当,就相当于给程序埋下了一颗定时炸弹,常见的非法访问指针也可以算是C++编程中的头等”罪行“,操作系统一旦发现这种行为,就算您写了Try-Catch来捕获异常,操作系统也会视而不见,生怕程序再闯出什么大祸,不会给程序改过自新的机会来继续运行,运气差点时,操作系统直接结束程序的生命,也就是软件崩溃或闪退,有时可能运气好点,操作系统没有立即出手,但不会影响程序的最终命运,操作系统终归会在某个时刻给程序判”死刑“并立即执行。

  • 非法访问指针的常见行为

1.野指针(wild pointer)

        野指针是代码中只定义但没有指向一块合法可用内存地址的指针,指针p的值不为空,而是一个”垃圾值“,这时使用if(p)来判断指针的合法性是无效的,如果对指针进行解引用操作,就会导致程序崩溃。大白话理解的话,就是小孩出生了,出生证都还没办呢,您就想去上户口,搞这搞那的。

#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qDebug()<<"C++野指针测试";
    // 只定义了指针,但指针没有指向一块合法和可用的内存区域
    // p的值不为空,而是随机指向了一块它没有访问权限的内存区域,p的值是一个”垃圾地址“
    int *p; 
    if(p){ // 此处if判断不起作用,程序会对野指针执行解引用操作
       // 野指针解引用触发未定义行为(Undefined Behavior, UB),一般都会导致程序立即闪退
       *p = 10;
    }
    return a.exec();
}

程序运行截图

        那如何预防野指针呢?

        预防野指针的办法很简单,最简

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值