文档章节

System.ReallocMem - 重新申请内存

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 430
阅读 2
收藏 0
本例是顺着 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     {定义结构; 记住该结构的大小是 12 个字节}
    name: string[8];
    age : Word;       {虽然 Word 是 2 字节大小; 但因按 4 字节对齐, 它占用 4 字节}
  end;
  PMyRec = ^TMyRec;   {定义结构指针}

var
  pr: PMyRec;

procedure TForm1.FormCreate(Sender: TObject);
const
  str = '地址: %d; 姓名: %s';
begin
  {申请 3 个 TMyRec 结构大小的内存}
  //GetMem(pr, SizeOf(TMyRec) * 3);
  ReallocMem(pr, SizeOf(TMyRec) * 3); {这一句也可以用上一行代替}

  {赋值}
  pr.name := '张三';
  pr.age := 11;

  Inc(pr);
  pr.name := '李四';
  pr.age := 22;

  Inc(pr);
  pr.name := '王五';
  pr.age := 33;

  {显示三个结构的地址与信息; 地址应该是连续的(相间 12 字节)}
  Dec(pr, 2);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 15278504; 姓名: 张三}
  Inc(pr);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 15278516; 姓名: 李四}
  Inc(pr);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 15278528; 姓名: 王五}

  {重新申请内存, 要 5 个结构大小, 并给 2 个新的结构赋值}
  Dec(pr, 2);
  ReallocMem(pr, SizeOf(TMyRec) * 5);

  Inc(pr, 3);
  pr.name := '马六';
  pr.age := 44;

  Inc(pr);
  pr.name := '孙七';
  pr.age := 55;

  {显示相关信息; 会发现地址虽然还是连续的, 但已经和上面不同!}
  Dec(pr, 4);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 14875920; 姓名: 张三}
  Inc(pr);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 14875932; 姓名: 李四}
  Inc(pr);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 14875944; 姓名: 王五}
  Inc(pr);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 14875956; 姓名: 马六}
  Inc(pr);
  ShowMessage(Format(str, [Integer(pr), pr.name])); {地址: 14875968; 姓名: 孙七}

  Dec(pr, 4);
  FreeMem(pr, SizeOf(TMyRec) * 5); {也可以用 FreeMem 清理 ReallocMem 申请的内存}
end;

end.

 
 
 
 
 

 

 

  
System 单元下的公用函数目录

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
C语言动态内存

malloc 原型: size:请求内存的总字节数 返回值: 总结 申请的内存在申请已后如同数组一样不可变,同时申请的内存是所以可以如数组一样通过访问到,同时用申请的内存空间系统不会进行初始化操作,...

mistylinux
01/17
0
0
PgSQL · 捉虫动态 · 执行大SQL语句提示无效的内存申请大小

背景 我们执行一个大SQL时(长度大于512M),会返回如下错误: 复现 我们首先复现出来这个问题 创建表 插入512M大对象 执行脚本后就能复现出来了 BUG分析 我们先找到出现这个错误的位置。 源...

阿里云RDS-数据库内核组
2015/08/05
0
0
malloc calloc realloc

三个函数的申明分别是: void realloc(void ptr, unsigned newsize); void malloc(unsigned size); void calloc(sizet numElements, sizet sizeOfElement); 都在stdlib.h函数库内 它们的返回值......

余二五
2017/11/22
0
0
malloc 和alloc及calloc的区别

C语言跟内存分配方式   (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。   (2) 在栈上创建。在执行函...

never7c
2016/05/16
55
0
C语言解释器的实现--存储结构(一)

目录: 1. 内存池 2. 栈 3. Hash表 1.内存池 在一些小的程序里,没什么必要添加内存管理模块在里面。但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的。至...

xumaojun
03/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 识别慢性能的宏

Page Profiling 给你了有关页面在载入的时候操作缓慢的邪教,你可以将下面的内容添加到调试(debug)级别: Version 3.1 及其后续版本 设置包名字为 com.atlassian.renderer.v2.components.M...

honeymose
10分钟前
0
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
26分钟前
0
0
maven的pom.xml用解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些...

JAVA码猿
50分钟前
1
0
20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
40
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部