惊世BUG!!高手请进!!(5分)

  • 主题发起人 主题发起人 16cy
  • 开始时间 开始时间
1

16cy

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure ScanBlockMem(AValue: DWord;AValue1: DWord; MemAddr: DWord; Addr: Pointer;Addr1: Pointer; ALength: Integer; var AList: TList);
var
i, nLength, nTempValue,nTempValue1: Integer;
mDt: TDataType;
begin
nLength := 4;
if not Assigned(AList) then
Exit;

i:= 0;
while i <= ALength - 1 do
begin
nTempvalue := DWord(pDWord(Addr)^);
nTempvalue1 := DWord(pDWord(Addr1)^);
if (nTempValue1 = AValue1) and (nTempValue1 = AValue1) then
AList.Add(Pointer(MemAddr + i));

Inc(i, 1);
DWord(Addr) := DWord(Addr) + 1;
DWord(Addr1) := DWord(Addr1) + 1;
end;
end;
看起来没错,编译也能通过,可是得不到同时成立的数据。
象下面这样分开写就能正确得到数据。

procedure ScanBlockMem(AValue: DWord;AValue1: DWord; MemAddr: DWord; Addr: Pointer;Addr1: Pointer; ALength: Integer; var AList: TList);
var
i, nLength, nTempValue,nTempValue1: Integer;
mDt: TDataType;
begin
nLength := 4;
if not Assigned(AList) then
Exit;

i:= 0;
while i <= ALength - 1 do
begin
nTempvalue := DWord(pDWord(Addr)^);
// nTempvalue1 := DWord(pDWord(Addr1)^);
if nTempValue1 = AValue1 then
AList.Add(Pointer(MemAddr + i));

Inc(i, 1);
DWord(Addr) := DWord(Addr) + 1;
//DWord(Addr1) := DWord(Addr1) + 1;
end;
end;

是不是Delphi的惊天大BUG?
还是函数本身有问题?
难道是一个函数里不允许有两个指针形参吗?
 
你只试了一种情况,再试下面这种情况看有没有数据呢?
若两种情况单独试了都有数据,而合在一起就没有数据的话,那倒有意思了也挺感兴趣->关注中.
另外: nTempvalue := DWord(pDWord(Addr)^);你的nTempvalue是integer类型,为什么不申明为DWord类型呢?这里看你是把DWord型赋给integer型,这样也可能隐含了一些错误.


procedure ScanBlockMem(AValue: DWord;AValue1: DWord; MemAddr: DWord; Addr: Pointer;Addr1: Pointer; ALength: Integer; var AList: TList);
var
i, nLength, nTempValue,nTempValue1: Integer;
mDt: TDataType;
begin
nLength := 4;
if not Assigned(AList) then
Exit;

i:= 0;
while i <= ALength - 1 do
begin
//nTempvalue := DWord(pDWord(Addr)^);
nTempvalue1 := DWord(pDWord(Addr1)^);
if nTempValue1 = AValue1 then
AList.Add(Pointer(MemAddr + i));

Inc(i, 1);
//DWord(Addr) := DWord(Addr) + 1;
DWord(Addr1) := DWord(Addr1) + 1;
end;
end;
 
两种情况都试了,全部能正常获得数据。
合在一起就不能了,晕!

另外那个integer 我改成了dword
现象还是一样的。
 

Similar threads

I
回复
0
查看
781
import
I
I
回复
0
查看
850
import
I
I
回复
0
查看
570
import
I
I
回复
0
查看
668
import
I
后退
顶部