Delphi程序使用资源的释放

Delphi程序使用资源的释放,第1张

 写出一个不会造成资源分配崩溃的Delphi应用程序的关键是确保如果程序中分配了资源 即使当故障发生 程序也应能释放占用的资源

文件 内存 WINDOWS资源和对象是一些必须时时加以注意的需确保释放的资源 下面的事件控制代码例子中先分配了内存 然后产生了一个错误 而造成它不再执行释放内存的程序代码

ProcedureTForm .ButtonlClick(Sender Tobject)

Var

Pointer Pointer

Integer Numzero Intger

begin

Numzero Κ

GetMem(Pointer ) {分配 K的内存资源}

Integer Κ divNumzero {此句产生一个除法错误}

FreeMem(Pointer ) {这里此句将不被执行}

end

尽管大多数错误不会这样明显 但上例包含了重要的一点 当错误产生后 程序执行跳出模块 其后的资源释放程序代码不再被执行 为了确保上例中的FreeMem能够释放被GetMem占用的内存资源 必须把代码放入一个资源保护模块

这里给出一个曲型的资源保护模块的格式

{资源的分配}

try

{资源的使用}

finally

{资源的释放}

end

上面的try...finally模块可以使程序总能执行finally部分中的任何程序代码 即使有错误在保护模块中产生 当try部分中的某一条代码执行引起错误时 执行将直接跳到finally部分 若执行中没有错误产生 则程序按正常顺序执行

在下面的事件控制代码例子中先分配了内存 然后产生了一个错误 但是仍然执行了释放内存的程序代码

ProcedureTForm .Button Click(Sender Tobject)

Var

Pointer Pointer

Integer Numzero Integer

begin

Numzero Κ

GetMem(Pointer ) {分配 K的内存资源}

try

Integer Κ divNumzero {此句产生一个除法错误}

finally

FreeMem(Pointer ) {这里此句仍将被执行}

end

end

lishixinzhi/Article/program/Delphi/201311/25084

过程内定义的字符串类型变量,即局部变量,当过程执行完毕,局部变量即自动销毁,无需程序员处理.

至于你所说的结构体,大概说的是自定义记录类型吧,你在创建实例和使用之后,用free销毁它就行了.全局变量,它的作用是在整个程序运行期间起保存和传递数据之用的,也就是说这个变量在用户执行某一 *** 作之后,要保存数据,过一会用户在执行另一个 *** 作时,还要使用这个数据,只有要承担这种任务的变量才定义为全局变量,除此之外,都应定义为局部变量.全部变量中的数据需要程序员销毁或者清除才能释放内存资源.

1、之所以不出错,是因为 *** 作系统目前还没有使用这块内存,释放和重新利用是两个概念。

2、ZeroMemory与FreeMem根本就是两个不同功能的函数,一个清空内存(填充0),一个释放内存(把资源还给 *** 作系统),代替个球?

3、CopyMemory仅仅是复制了9个字符,字符串必须以0结尾,你也没有置零。把 GetMem(A^.pac, 100)改成A^.pac := AllocMem(100)才对。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12040324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存