在运行Byte(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255;时,当SPECWIDTH上1000时,报内存出错,为什么啊,超过内出地址了吗?怎么办啊!

解决方案 »

  1.   

    Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)
    报错应该你这里计算出来的指针地址是非法的,不允许访问的地址。
      

  2.   

    Byte(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255从上面代码看你是一个而维矩阵点,超不超范围只有你知道。
      

  3.   

    Byte 0..255 unsigned 8-bit
    Word 0..65535 unsigned 16-bit
    Longword 0..4294967295 unsigned 32-bitByte的值只能是0-255,可以改用Word
      

  4.   

    改为Word(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255还是报错
      

  5.   

    // 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
      

  6.   

    for X := 0 to SPECHEIGHT do
    你把修改为: for X := 0 to SPECHEIGHT - 1 do 看看,
    那个byte(Pointer(Longint(SpecBuf) + X * SPECWIDTH + SpecPos)^) := 255 不用修改的!
      

  7.   


    试下将for X := 0 to SPECHEIGHT do 改为 for X := 0 to SPECHEIGHT - 1 do
      

  8.   

    谢谢xhz8000,问题解决了,搞错了上界了。
      

  9.   

     for X := low(SPECHEIGHT) to high(SPECHEIGHT) do
    这样最保险