编程中发现我定义的一个数组的length的值会发生变化,有时会变为0,有时会变为其它值。
遇到这个问题之后,我首先想是不是我的数组大小没有分配或者分配的有问题,结果都不是,在网上查找帖子,寻找哪些情况可能会导致数组的length发生变化,得到的结论都是数组空间分配之后,其大小不能变化。然后陷入苦闷。
继续调,继续调,发现数组的大小只有在执行某段代码之后才会发生变化,并且是和该数组本身无关的代码。于是我想到的飞踩,果然在刚才的那小段代码中发现了内存问题。问题的根本原因是内存copy时,将多余的内容拷贝到了数组的后面,导致数组后面的空间被重写。
启示:
(1)数组的length发生改变得考虑飞踩。
(2)定位飞踩问题的可以使用排除法。对发生问题时已经执行过的代码块或者函数进行一一尝试,排除。如果发现将某个小的代码块加上之后,问题会出现,把小的代码块去掉之后,问题不会出现,那么该小段代码块就是发生代码飞踩的代码块。