我今天写了一段代码, for dw:=0 to dwItemCount-1  do
  begin
   .....
end;
   if dw = dwItemCount then我运行的时候,发现我的dw的值竟然是 3347440。
晕。。怎么回事?

解决方案 »

  1.   

    那你的dwItemCount 是多少, 先看看dwItemCount 有没有初始化
      

  2.   

    把dw和dwItemCount的类型贴出来。还有在哪里等到值也铁出来,才好找原因。
      

  3.   

    dwItemcount的值是0我后来听我一个朋友说把优化去掉就OK了。但是感觉很郁闷
      

  4.   

    dw 和 dwItemCount是 longint型的。delphi 为什么要把 dw给优化掉呢??下面明明用到了 dw
    /////////////////////////////////////////
    if dw = dwItemCount then
      

  5.   

    一定是dwItemCount 没有初始化!不初始化系统给了什么值就不知道了。
      

  6.   

    dwItemCount初始化了。。是0,
    我取的是listCtrl的记录个数
      

  7.   

    请注意:
      循环之后不要使用循环变量,由于 Delphi 的内存优化,它的值已经无效
      

  8.   

    for dw:=0 to dwItemCount-1  do
      begin
       .....
      end;
      if dw = dwItemCount then
    ////////////////////////////
      dw 在做循环变量的时候是压到栈里边的,编译器要对其进行优化,
    如果你的循环体中没有使用到 dw,你还会发现dw 是从dwItemCount-1 降到 0 
    的 
      Integer值,delphi 不会初始化为 0 
      String 却是自动初始化为'' 的
    不对的地方请指教
      

  9.   

    哎,这个问题我也碰到过,到现在都难以接受DELPHI的这种处理方式。
      

  10.   

    Var
      SaveDW : Integer;
    Begin
      SaveDW := 0;
      for dw:=0 to dwItemCount-1  do
        begin
          .....
          SaveDW := DW;  //退出时保存
        end;
     //注,用于FOR循环的变量,在外面取值有时会出错.所以在退出时要先另外保存起了.
    //相信楼主的代码在编译时会有警告提示.  if Savedw = dwItemCount then
      

  11.   

    mei you 初始化消除编译室的警告就不会这样了