【发布时间】:2016-12-15 02:31:23
【问题描述】:
想象以下记录:
type
PSocket_Tunneling = ^TSocksServer_Socket_Tunneling;
TSocksServer_Socket_Tunneling = record
Socks_Queue: array of byte;
end;
Socks_Queue,动态数组,最近才知道是指针。
好的,现在我们在另一个指针中分配这条记录:
var
Socket_State: PSocket_Tunneling;
begin
GetMem(Socket_State, SizeOf(TSocksServer_Socket_Tunneling));
try
Socket.Data:= Socket_State;
with PSocket_Tunneling(Socket.Data)^ do
begin
SetLength(Socket_State.Socks_Queue, 10);
end;
except
FreeMem(Socket.Data);
Socket.Close;
end;
end;
Socket.Data 是一个指针。 SetLength 行,给我访问冲突(引发异常类 $C0000005 与消息访问冲突...)。
我应该如何正确访问字节数组?
【问题讨论】:
-
这与您的崩溃无关,但您的
with语句没有用,因为您不是通过with访问记录字段,而是直接访问局部变量。如果您想正确使用with,请从SetLength()语句中删除Socket_State.,否则只需删除with(无论如何您都应该这样做)。 -
好的,谢谢您的建议。
标签: delphi