我的代码是这样的:
n:=0;
j:=0;
m:=0;
for m:=0 to (LB-1) do //LB是动态数组FieldB2的长度
begin
for i:=1 to FieldLengthA do
begin
FS[m,j]:=MidStr(FieldB2[n],1,i);
showmessage(FS[m,j]);
j:=j+1;
end;//第二个For的End
n:=n+1;
end;//第一个For的End
其中FieldB2是一个基类型为string的一维动态数组,FS是基类型为string的二维的动态数组;程序的作用是从动态数组FieldB2的每一个元素中依次取1到FieldLengthA长度的字符(串)放到FS中,这样m和n是同时变化的。
我的问题就出在如果FS[m,j]:=MidStr(FieldB2[n],1,i);中的m和n分别是0,1或者2 这样的常数时,程序没有错误;但是一旦用m和n来做循环,就出现违法访问的错误。实在被这个东西搞得焦头烂额,望各位高手不吝赐教!
如果有不用指针的更好地解决这个问题的方法,也请一并告知。

解决方案 »

  1.   

    for m:=0 to (LB-1) do //LB是动态数组FieldB2的长度
    begin
    for i:=1 to FieldLengthA do
    begin
    FS[m,i-1]:=MidStr(FieldB2[n],1,i);
    showmessage(FS[m,j]);
    end;//第二个For的End
    n:=n+1;
    end;//第一个For的End————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    呵呵,访问越界http://lysoft.7u7.net
      

  3.   

    我认为是下面这句话出问题,因为fieldb2[n]的长度不够,你又超过范围做这件事情,MidStr(FieldB2[n],1,i);
      

  4.   

    for m:=0 to (LB-1) do //LB是动态数组FieldB2的长度
    begin
    for i:=1 to FieldLengthA do
    begin
    FS[m,i-1]:=MidStr(FieldB2[n],1,i);
    showmessage(FS[m,j]);
    end;//第二个For的End
    n:=n+1;
    end;//第一个For的End
      

  5.   

    不太了解你的逻辑,是不是这样?
    n:=0;
    j:=0;
    m:=0;
    for m:=0 to (LB-1) do 
    begin
      j := 0;//这里加一句
      for i:=1 to FieldLengthA do
      begin
        FS[m,j]:=MidStr(FieldB2[n],1,i);
        showmessage(FS[m,j]);
        j:=j+1;
      end;
      n:=n+1;
    end;不过循环过程中好象m和n永远相等啊,没有必要用两个变量吧?