var   
  Item,i:integer;
  ItemName: array of string;
 
begin
    Item:= DBGrid1.Columns.Count;
    SetLength(ItemName, Item-1);
    For i:=0 to Item-1 do
     ItemName[i]:= DBGrid1.Columns[i].Title.Caption ;
就这样,一执行就报错,就出现一个标题为cpu的窗口,16进制数的那种报错窗口

解决方案 »

  1.   

     For   i:=low(itemname)   to  High(itemname)   do
      

  2.   


    var       
      Item,i:integer; 
      ItemName: array of string;   
    begin 
      Item := DBGrid1.Columns.Count; 
      SetLength(ItemName, Item);   //你SetLength的项数错了
      For i := 0 to Item - 1 do 
        ItemName[i] := DBGrid1.Columns[i].Title.Caption; 
    end
      

  3.   

    var       
        Item,i:integer; 
        ItemName:   array   of   string; 
      
    begin 
            Item:=   DBGrid1.Columns.Count;    //如果Item为10
            SetLength(ItemName,   Item-1);      //开辟的控件为9 
            For   i:=0   to   Item-1   do       //赋10个值到ItemName,自然会导致地址访问越界冲突
              ItemName[i]:=   DBGrid1.Columns[i].Title.Caption   ; 
      

  4.   

    2楼正解,但1楼用low和high比用别的方法好,支持
      

  5.   

    内存分少了一个 
        SetLength(ItemName,   Item-1);      
    不要减一的