要疯了的调试结果

zhangxuyu1118 2014-07-09 11:07:49
var
var
buf: array[0..255] of char;
len, i, ret: integer;
RetLen: Byte;
p: Pchar;
begin
...
len := 0;
for i := 0 to 255 do
begin
ret := LsdMBus_Read(@Buf[i], 1, @RetLen); //ret返回是0
if ret >= 0 then
begin
len := len+1; //断点进入这里,观察到len没有递增,永远等于1!要疯了
end
else
Break;
end;
...
end;
len := len+1; ,执行后len为什么不增加啊。观察发现问题是:每次递增前len=0。
...全文
191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fang 2014-07-11
  • 打赏
  • 举报
回复
下面就是溢出带来的结果,
fang 2014-07-11
  • 打赏
  • 举报
回复
引用 6 楼 zhangxuyu1118 的回复:
ret返回是1,多次执行到断点就是没有递增。XP平台,重起后现象一样。上述代码移植到服务器端调试没问题。
觉得是你的 ret := LsdMBus_Read(@Buf[i], 1, @RetLen);BUF这个参数溢出导致的, len := len+1; //断点进入这里,观察到len没有递增,永远等于1!要疯了 从上面看,如果溢出四个字节且BUF的溢出后面的数据是全0,你的len刚好是0,执行一次LsdMBus_Read复位0,所以你的len永远是1, 刚好你的BUF是在栈顶,所以我要你调整变量位置看是不是这个原因,
zhangxuyu1118 2014-07-11
  • 打赏
  • 举报
回复
ret返回是1,多次执行到断点就是没有递增。XP平台,重起后现象一样。上述代码移植到服务器端调试没问题。
fang 2014-07-10
  • 打赏
  • 举报
回复
你的变量定义换下位置 var len, i, ret: integer; RetLen: Byte; buf: array[0..255] of char;
leejunokokok 2014-07-10
  • 打赏
  • 举报
回复
引用 2 楼 lyhoo163 的回复:
var
  buf: array[0..255] of char;
  len, i, ret: integer;
  RetLen: Byte;
  p: Pchar;
begin
      len := 0;
      for i := 0 to 255 do
      begin
        ret := 0;
        if ret >= 0 then
        begin
           len := len+1;   //断点进入这里,观察到len没有递增,永远等于1!要疯了
        end
        else
          Break;
        ShowMessage(inttostr(len))
      end;
改成上述代码,每次循环返回均+1了。说明 ret := LsdMBus_Read(@Buf[i], 1, @RetLen); ret返回是的值<0 ,认真检查一下代码。
taste品味 2014-07-10
  • 打赏
  • 举报
回复
len后面没有使用到,编译优化掉了
lyhoo163 2014-07-10
  • 打赏
  • 举报
回复
var
  buf: array[0..255] of char;
  len, i, ret: integer;
  RetLen: Byte;
  p: Pchar;
begin
      len := 0;
      for i := 0 to 255 do
      begin
        ret := 0;
        if ret >= 0 then
        begin
           len := len+1;   //断点进入这里,观察到len没有递增,永远等于1!要疯了
        end
        else
          Break;
        ShowMessage(inttostr(len))
      end;
改成上述代码,每次循环返回均+1了。说明 ret := LsdMBus_Read(@Buf[i], 1, @RetLen); ret返回是的值<0 ,认真检查一下代码。
tcmakebest 2014-07-10
  • 打赏
  • 举报
回复
如果循环只运行了一次就break了,len当然只会是1.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧