首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问另一个指针内的记录指针

访问另一个指针内的记录指针
EN

Stack Overflow用户
提问于 2016-12-14 18:02:28
回答 1查看 107关注 0票数 2

想象一下下面的记录:

代码语言:javascript
复制
type
  PSocket_Tunneling = ^TSocksServer_Socket_Tunneling;
  TSocksServer_Socket_Tunneling = record
    Socks_Queue: array of byte;
  end;

Socks_Queue,动态数组,我最近了解到它是一个指针。

好的,现在我们在另一个指针中分配这个记录:

代码语言:javascript
复制
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与消息访问冲突.)。

如何正确访问字节数组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-14 18:22:15

问题是对托管类型使用GetMemFreeMem。这是一个错误,因为它们没有初始化和最后确定托管类型。注意,它是管理的,因为它包含一个动态数组。如果它包含一个接口、一个字符串、一个变体等等,那么它将被管理。

通过使用New分配和Dispose去分配来解决问题。这些存在是为了执行GetMemFreeMem不做的事情,即初始化和最后确定托管类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41149193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档