运行时报错,搞了半天确实不懂!求救!100大洋奉上!(100分)

  • 主题发起人 主题发起人 waxu
  • 开始时间 开始时间
原因这出在receive_data没有分配内存!
receive_data只是一个指针,你在没有分配内存的情况下使用他,已经相当的危险。
当退出该事件处理过程时,receive_data是一个局部变量,Delphi会释放其内存。因而错误。
建议改动如下:

procedure Tic_user_chongzhi.Button4Click(Sender: TObject);
var
receive_data:pchar;
begin
[red]GetMem(receive_data, 256);//256是一个足够以读入数据的最小数值
try[/red]
//学号
st:=IC_Read(mainform.icdev,33,20,receive_data);
if st=0 then
begin
receive_data[20]:=#0;
edit11.text:=strpas(receive_data);
end;
...
//挂失标志
st:=IC_Read(mainform.icdev,155,10,receive_data);
if st=0 then
begin
receive_data[10]:=#0;
edit17.text:=strpas(receive_data)+'次';
end;
// edit2.SetFocus;
// button3.Enabled:=true;
[red]finally
FreeMem(receive_data);
end;[/red]
end;
 
经典,[green]JohnsonGuo[/green]的解释太霸道了!想当经典!
虽然我的问题已经解决,但是为了感谢[green]JohnsonGuo[/green],100大洋全给你了!
其他的朋友,对不住了!你看了[green]JohnsonGuo[/green]的方法也会这样的。
原谅我吧!
但是我昨天也用另外一种方法解决了这个问题!
是这样,红色的为修改过后,修改过后一切正常!


receive_data:[red]array [0..256] of pchar;[/red]
begin
//学号
st:=IC_Read(mainform.icdev,33,20,[red]@[/red]receive_data);
if st=0 then
begin
receive_data[20]:=#0;
edit11.text:=strpas([red]@[/red]receive_data);
end;
...
//挂失标志
st:=IC_Read(mainform.icdev,155,10,[red]@[/red]receive_data);
if st=0 then
begin
receive_data[10]:=#0;
edit17.text:=strpas([red]@[/red]receive_data)+'次';
end;
// edit2.SetFocus;
// button3.Enabled:=true;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
962
import
I
I
回复
0
查看
730
import
I
S
回复
0
查看
937
SUNSTONE的Delphi笔记
S
后退
顶部