一个RightStr的问题,难道又没有人知道 (30分)

  • 主题发起人 主题发起人 sunjialong
  • 开始时间 开始时间
S

sunjialong

Unregistered / Unconfirmed
GUEST, unregistred user!
在使用RightStr 有时会出现错误
程序终止在push $06 上
提示access violation at 0x77d16d4f:write of address 0x00030ffc
之后就中断,无法继续运行,这个命令原来没有问题,是我在把程序中指针传递的数据改成了记录型数据之后发生这个错误的,而且我没有动过这行代码。
我估计时不是别的问题?
如果大家确实需要的话我会贴出全部代码的,下面是出错的一部分,加***********的一行,在调试的时候有时通过,有时不行
function StrToRad(i:String):Radical;
var
a,temp:String;
bb:Integer;
ii:PERadical;
//////////////////////////////
function StrToERad(a:String):PERadical;
var
bb:Integer;
i:String;
begin
New(Result);
with Result^do
begin
try
q.d:=0;
i:=a;
if LeftStr(i,1)='+' then
i:=RightStr(i,Length(i)-1);
if LeftStr(i,1)='s' then
i:='1'+i;
if LeftStr(i,2)='-s' then
i:='-1'+RightStr(i,Length(i)-1);
if i='' then
begin
r:=0;
q.n:=0;
q.d:=1;
exit;
end;
bb:=1;
Result^.r:=Length(i);
while (MidStr(i,bb,1)<>'s') and (bb<=Result^.r)do
Inc(bb);
if (bb=Result^.r+1) then
begin
r:=1;
q:=StrToFra(i);
exit;
end;
q:=StrToFra(LeftStr(i,bb-1));
r:=StrToInt64(RightStr(i,Length(i)-bb));
except
FreeMem(Result);
raise;
end;
end;
end;
/////////////////////
begin
a:=i+'+';
Result.r.n:=0;
Result.r.d:=1;
if a='+' then
exit;
while a<>'+'do
for bb:= 1 to Length(a)do
if((MidStr(a,bb,1)='+') or (MidStr(a,bb,1)='-'))and(bb<>1)then
begin
temp:=LeftStr(a,bb-1);
ii:=StrToERad(temp);
Add(@Result.i,ii);
a:=RightStr(a,Length(a)-bb+1);
*************************
break;
end;
// if High(Result.i)=-1 then
// Add(@Result.i,StrToERad(a));
PR(@Result);
end;

 
直接用copy()吧
 
我已经重写了代码,解决了问题,但是这个问题仍然不知道是为什么,所以继续等待,看看大家有什么看法
 
接受答案了.
 
后退
顶部