工作当中,很多时候,我们喜欢使用FillChar填充初始化一个内存块。虽然看起来很简单,但是使用不当就会造成内存泄露,内存泄露往往会导致很多莫名奇妙的问题。

Sample1

procedure TForm1.btn7Click(Sender: TObject);
varaP: PChar;
beginaP := nil;GetMem(aP, 30);FillChar(aP, SizeOf(AP), #0);FreeMem(aP, 30);
end;

这样写有问题吗?看起来很平常,或许我们很多人都是这样写的。可是,很不幸的是,当我们用FastMM检测的时候,会很明确的告诉你,这样写会造成内存泄露的,在IDE中运行这段代码,FastMM大概会提示:

“这个应用程序存在内存泄露,小内存块的泄露有:

29-36字节:未知X1

解决办法是怎样的呢?很简单,明确之处内存的开始地址:

procedure TForm1.btn7Click(Sender: TObject);
varaP: PChar;
beginaP := nil;GetMem(aP, 30);FillChar(aP[0], SizeOf(AP), #0);FreeMem(aP, 30);
end;

进行这样一个小改动之后,FastMM就安静了!

但是这样的一个结论只是针对pchar类型的指针而言。

2 举一反三,数组

在Delphi中,数组分为静态数组、动态数组,静态数组的话,变量名和第一个元素名字均可以表示数组的连续内存的首地址,而对于动态数组呢,则必须明确标示元素0来标示数组分配内存的地址

procedure TForm1.btn8Click(Sender: TObject);
varMyStaticArr: array [1..10] of char;MyDynArr: array of char;
beginFillChar(MyStaticArr, SizeOf(MyStaticArr), #0);//FillChar(MyStaticArr[1], SizeOf(MyStaticArr), #0);
  //以上两种写法都可以
  SetLength(MyDynArr, 100);FillChar(MyDynArr[0], SizeOf(MyDynArr), #0);//下面就是错误的写法,泄露的内存根据申请的大小而定
  FillChar(MyDynArr, SizeOf(MyDynArr), #0);
end;

FillChar的使用方法相关推荐

  1. python字符型数据_Python基础【第五篇】:基础数据类型(字符型)

    String(字符串) 字符串的形式 在python中字符串可以用' '(单引号)," "(双引号),和''' '''(三个单引号). string1 = 'james'strin ...

  2. python 字符串常用方法

    Python 开发过程中,经常需要对字符串进行一些特殊处理,比如拼接字符串.截取字符串.格式化字符串等,这些操作无需开发者自己设计实现,只需调用相应的字符串方法即可. python 字符串分割 [ro ...

  3. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  4. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  5. Python ljust()方法

    描述 Python ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串.如果指定的长度小于原字符串的长度则返回原字符串. 语法 ljust()方法语法: str.ljust ...

  6. python中字符串的方法及注释

    字符串的方法及注释表: 函数 描述 capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width,fillchar=None) ...

  7. python字符类型的一些方法

    python 字符串和字节互转换.bytes(s, encoding = "utf8") str(b, encoding = "utf-8") i.isspac ...

  8. Python数据类型方法总结

    字符串 Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠()转义特殊字符.下面总结一下字符串类型的常用方法. 1.isalnum():如果字符串至少有一个字符,并且所 ...

  9. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. 在编程中,几 ...

最新文章

  1. GitHub/GitLab/Gitee中项目互拷贝后仍保留历史提交记录的方法
  2. 浅析React之事件系统(二)
  3. Cissp-【第5章 身份与访问管理】-2021-3-14(561页-600页)
  4. LVS+keepalived高可用负载均衡集群部署(一) ----数据库的读写分离
  5. python3 isalnum
  6. SAS 9.13作图—gchart命令
  7. 期末总结(第五章—)
  8. 《Java技术》预备作业总结
  9. N皇后问题——DFS+回溯剪枝
  10. JS递归算法经典案例与分析
  11. libpng创建及编辑图片
  12. 年薪60w的程序员与年薪6w的极品程序员,差距怎么这么大呢?
  13. 一篇文章教你搞懂日志采集利器 Filebeat
  14. Cesium中的Heading/Pitch/Roll详解
  15. python如何对齐输出_python对齐输出
  16. java winrar_Java使用winrar解压缩 | 学步园
  17. 第5组 团队展示(组长)
  18. 安卓中动态生成界面布局
  19. 不完全性定理 元数学和自然数_开读哥德尔原著第一章——哥德尔读后之十
  20. 中国大学MOOC C语言程序设计(大连理工大学) 课后编程题 第九周题解(个人向仅供参考)

热门文章

  1. 自然数平方和公式推导
  2. 计算机休眠文件可以删除吗,Win10休眠文件hiberfil.sys怎么彻底删除?
  3. 操作系统概念---导论
  4. HTTPX: 青出于蓝,比肩requests的新生代网络请求库
  5. nohup后台运行关闭后台程序
  6. pinyin4j学习笔记
  7. 达内python培训多久
  8. torch中.data和.detach()的区别
  9. 在/tmp目录下,新建项目director新建3个TXT文件,分别命名file1 、fie2、fie3,用 vi编辑器分别在三个文件中输入内容
  10. noip2017爆炸记——题解总结反省(普及组+提高组)