C++代码中数据被异常改动

本文通过一个实例探讨了在程序运行过程中由于数组越界而导致结构体数据无端被更改的问题,并总结了在内存使用上的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在用以前写的代码,突然发现结构体中的数据在毫无征兆(没有人为赋值改动)的情况下发生了改变,检查了很长时间,也让别人检查了很长时间,也没有发现问题,觉得非常的诡异!

最后,我下定决心将整个代码跑一遍,一步步地调试,终于发现了问题,原来是有一个参数在存数据的时候发生了越界!巧合的是,越界发生的地方,刚好是那个结构体存储数据的地方!导致结构体中的数据无端被更改了!

整个错误的过程基本可以通过以下的形式描述出来:

首先,定义参数,

typedef struct ST

{

int x;

int y;

}st;

st struc;

struc.x=10;

struc.y=10;

int a[10]={0};

数据在处理时,

a[20]=12;//发生了越界!

恰巧的是,越界的地方正好是struc所开辟内存的地方,结果导致struc中的数据发生了改变!

-------------------------------

总结:

之前,一直没有发现这个问题是因为越界一般不怎么发生,即使发生了也没有刚好碰到前面定义的参数中,所以bug一直被隐藏下来了!

总而言之,在使用数据时,一定要注意内存!哪怕不是手动开辟的内存空间,也要留心其它形式的数据越界!这样产生的问题很难及时发现,哪怕发现了,对编程不是很在行的话,也很难发现问题的根源(尤其代码量非常巨大的时候!)。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值