文档章节

System.GetMem、System.FreeMem - 申请和释放内存

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 305
阅读 4
收藏 0
如果只为单个指针分配内存, 和 New 和 Dispose 是一样的; 与之不同的是: GetMem 可以申请连续的多个内存块.

举例:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

Type
  TMyRec = record     {定义结构}
    name: string[8];
    age : Word;
  end;
  PMyRec = ^TMyRec;   {定义结构指针}

var
  pr: PMyRec;

procedure TForm1.FormCreate(Sender: TObject);
begin
  {同时分配 3 个结构的内存; 此时的三个结构在内存中是连续的}
  GetMem(pr, SizeOf(TMyRec) * 3);

  {此时 pr 指向第一个结构, 赋值}
  pr.name := '张三';
  pr.age := 11;

  {让 pr 指向第二个结构, 赋值}
  Inc(pr);
  pr.name := '李四';
  pr.age := 22;

  {让 pr 指向第三个结构, 赋值}
  Inc(pr);
  pr.name := '王五';
  pr.age := 33;

  {先回到第一个结构, 然后依次读取}
  Dec(pr, 2);
  ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {张三 11 岁}
  Inc(pr);
  ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {李四 22 岁}
  Inc(pr);
  ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {王五 33 岁}

  {从第一个结构, 清除 3 个结构大小的内存, 这样就删除了上面三个结构}
  Dec(pr, 2);
  FreeMem(pr, SizeOf(pr^) * 3); {SizeOf(TMyRec)  和 SizeOf(pr^) 是一样的}
end;

end.

 
 
 
 
 

 

 

  
System 单元下的公用函数目录

本文转载自:http://www.cnblogs.com/del/archive/2008/03/27/1125778.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
使用Memcheck发现常见的内存问题

1、使用未初始化的内存 全局变量和静态变量的初始值均为0,而局部变量和动态申请的变量,其初始值为随机值。如果程序使用了随机值的变量,那么程序的行为就变得不可预期。 输出结果会显示:C...

小呀小蜗牛
2015/10/22
149
0
haproxy-代码阅读-内存管理

haproxy内存池概述 内存池按照类型分类,每个类型的内存池都有一个名字,用链表记录空闲的内存块,每个内存块大小相等,并按照16字节对齐。 haporxy用pool_head 结构记录内存池 在程序执行过...

沈小错
2017/05/29
0
0
C语言 malloc 内存泄漏

错误代码如下: 这个函数先为三个结构体变量申请内存空间,其中一个申请失败就返回失败。如果全都申请成功的话,就对结构体变量进行初始化工作。逻辑上似乎没有什么问题,但是这里隐藏了一个...

u011303443
03/18
0
0
C语言开发中的内存检测基本模块

一、前言 在用C语言开发产品时,由于C语言中的指针操作的灵活性,因此在使用指针时也需要特别小心,稍微不严谨就会导致内存问题,如内存未初始化,内存泄露,内存重复释放等。 但是在实际开发...

墙头草
2011/05/26
0
0
C语言内存管理讲解

谨记 人生有两条路,一天需要用心走,叫做梦想;一条需要用脚走,叫做现实。心走的太快,会迷路的;脚走的太快,会摔倒的;心走的太慢,现实会苍白;脚走的太慢,梦不会高飞。人生的精彩,是...

长风留言
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
3
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部