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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33810188/article/details/82632205

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

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

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

首先,定义参数,

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一直被隐藏下来了!

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

猜你喜欢

转载自blog.csdn.net/qq_33810188/article/details/82632205