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;
iiERadical;
//////////////////////////////
function StrToERad(a:String)ERadical;
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;
程序终止在push $06 上
提示access violation at 0x77d16d4f:write of address 0x00030ffc
之后就中断,无法继续运行,这个命令原来没有问题,是我在把程序中指针传递的数据改成了记录型数据之后发生这个错误的,而且我没有动过这行代码。
我估计时不是别的问题?
如果大家确实需要的话我会贴出全部代码的,下面是出错的一部分,加***********的一行,在调试的时候有时通过,有时不行
function StrToRad(i:String):Radical;
var
a,temp:String;
bb:Integer;
iiERadical;
//////////////////////////////
function StrToERad(a:String)ERadical;
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;