今天编程的时候踩了一个大坑,说是大坑,准确的说其实是阴沟里翻船
一般说来 Range check error 这个异常的出现,经常出现在数组等越界访问的时候;今天恰好也是在TBytes的for循环使用中出现,所以一只认为是访问越界导致的问题,于是苦苦寻找是哪里引起的问题,甚至后来开始怀疑因内存越界导致的异常释放导致的问题, 整整搞了好几个小时,累了,中午吃了饭休息一下~
下午来又继续调试,难道是Linux下才有的问题?于是切换回Windows,问题还是一样~郁闷!!网上说关闭检测就可以了
Projcect->Option->Complier->Runtime Errors->Range Checking 去掉勾选 即可; 弄了后果然可以了,这个感觉不是越界引起的问题呢~
每次都可以在固定位置出现,不管是否打断点都是,这种也不像是内存越界导致的问题,到底是什么问题?
最后仔细看了看代码,直接大跌眼镜; 确实是越界; 下面是代码
var
_byte : byte;
_Bytes : TBytes;
i : integer;
begin
setlength(_Bytes, 10);
_byte := 0;
//这里是给_Bytes 进行随机赋值
for i = 0 to length(_Bytes) - 1 do
begin
_byte := _byte + _Bytes[i];
end;
end;
Pascal最后确定应该是给byte赋值时出现的问题;因为两个Byte相加可能引起进位,没错,就这个原因;于是按下面改
var
_byte : byte;
_Bytes : TBytes;
i : integer;
begin
setlength(_Bytes, 10);
_byte := 0;
//这里是给_Bytes 进行随机赋值
for i = 0 to length(_Bytes) - 1 do
begin
_byte := Byte(_byte + _Bytes[i]); //这个地方进行了一个Byte的强制转换;
end;
end;
Pascal哎~~ 兜兜转转一大圈,在阴沟里的大坑中狠狠摔了一跤~~