改为Word(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255还是报错
// move er onto next position SPECWIDTH:=5000; SpecPos := (SpecPos + 1) mod SPECWIDTH; for X := 0 to SPECHEIGHT do Word(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255; //Byte
for X := 0 to SPECHEIGHT do 你把修改为: for X := 0 to SPECHEIGHT - 1 do 看看, 那个byte(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255 不用修改的!
试下将for X := 0 to SPECHEIGHT do 改为 for X := 0 to SPECHEIGHT - 1 do
谢谢xhz8000,问题解决了,搞错了上界了。
for X := low(SPECHEIGHT) to high(SPECHEIGHT) do 这样最保险
报错应该你这里计算出来的指针地址是非法的,不允许访问的地址。
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bitByte的值只能是0-255,可以改用Word
SPECWIDTH:=5000;
SpecPos := (SpecPos + 1) mod SPECWIDTH;
for X := 0 to SPECHEIGHT do
Word(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255; //Byte
你把修改为: for X := 0 to SPECHEIGHT - 1 do 看看,
那个byte(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255 不用修改的!
试下将for X := 0 to SPECHEIGHT do 改为 for X := 0 to SPECHEIGHT - 1 do
这样最保险