C++什么时候出现访问越界?

您所在的位置:网站首页 行程卡非法访问啥意思啊 C++什么时候出现访问越界?

C++什么时候出现访问越界?

2023-06-22 09:20| 来源: 网络整理| 查看: 265

所谓内存访问越界,其实就是指程序访问了系统已经回收或者未经分配的内存。和内存泄漏不一样,内存泄漏指的是系统分配给你内存,你却找不到它(一般是由于保存这块内存的指针被覆盖了),因此导致这块内存资源无法释放,称作内存泄漏,内存泄漏是很严重的问题,随着程序的运行,会导致系统的内存占用量不断增高,整个系统由于内存紧张而造成卡顿或者假死,如果这是服务器,问题就严重了,而内存访问越界带来的问题,一般是不可预期的错误,程序有可能运行正常,结果也正确。或者程序运行正常,但是结果不正确,严重一点的结果就是非法访问了受保护的内存,进程直接挂掉了。

下面是内存访问越界的实例:

访问数组越界。

用字符串函数如strcpy,strcat等函数进行字符串操作的时候,字符串数组空间不够,导致内存访问越界。

字符串没有末尾的‘\0’,导致进行strcpy,用指针遍历字符串操作的时候,访问越界。

通过new或者malloc开辟的内存,在代码访问时,没有在申请长度以内,出现访问越界。或者访问了刚被free或者delete掉的内存。

函数返回了局部变量或者临时量的地址或者引用,函数返回后在调用方通过地址或者引用进行访问越界。

指针指向临时对象,语句完成后,临时对象被析构,此时通过指针调用这个临时对象,出现越界。

使用了不合理的类型强转,让较大类型的指针指向较小内存的指针,通过大类型指针间接访问内存,出现访问越界。比如把基类强转成派生类,让派生类指针指向一个基类对象。

多线程访问共享对象时,某个线程访问它,这个对象可能在其它线程中被析构掉了,就出现访问越界。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3