指针数组操作,老是出现异常,富翁们帮忙看看我实在找不到问题出在哪里!(100分)

  • 主题发起人 主题发起人 LIUYECAI
  • 开始时间 开始时间
L

LIUYECAI

Unregistered / Unconfirmed
GUEST, unregistred user!
当程序运行时try...except..又侦测不到异常只是按 ESC 时出现提示指针操作错误.
代码是这个样子,
var
volt: array[1..20][1..2] of ^double
begin
try
while true do
begin
for i:=1 to 20 do
begin
new(volt[1]);
new(volt[2];
//getmem(volt[1],30)
//use getmem and freemem procedure
//getmem(volt[2],30)
//same error occur
AI_VRead(1,0,gain,volt[1])
//call procedure set volt[1]
AI_VRead(1,1,gain1,volt[2]);//call procedure set volt[2]
end;

for j:=1 to 20 do
begin
if volt[j][1]^ > MaxValue then
begin
CurrValue :=Maxvalue;
Maxvalue :=volt[j][1]^;
volt[j][1]^ := CurrValue;
end

.....//long code
end;
.........

for i:=1 to 20 do
begin
dispose(volt[1]);
dispose(volt[2]);
//freemem(volt[1]);
//freemem(volt[2]);
end;
Application.ProcessMessages;

if ((GetAsyncKeyState(VK_ESCAPE) and $8000) <> 0) or StopOk then
begin
break;
end;
end;
except
showmessage('an error occur!')
//inspect exception
end

 
各位在线富翁帮帮忙先!
 
用new就要分配内存的啊,况且一个Double不可能有30字节
 
djdsz兄:
我知道 NEW ...DISPOSE 是一对,
GETMEM...FREEMEM是一对
我的意思是用NEW和GETMEM, 都会出错误?
分配30个字节会出现问题吗? 应该只有分配下了空间才会有错吧!
 
各位DFW,我很急啊!给个答复吧。
 
终于被我找到错误了。
 
原来指针操作是没问题的是我在很长的计算中计算了volt[0][1], volt[0][2]
是我不小心了.
 
接受答案了.
 

Similar threads

I
回复
0
查看
654
import
I
I
回复
0
查看
719
import
I
I
回复
0
查看
694
import
I
I
回复
0
查看
1K
import
I
后退
顶部