delphi 结构体的疑惑?解决方法
delphi 结构体的疑惑?
疑问一:
结构体1
type
PTRecTest = ^TRecTest;
TRecTest = record
iAge:Integer;
sName:array[0..29] of char;
end;
结构体2
type
TRecTest = record
iAge:Integer;
sName:array[0..29] of char;
end;
PTRecTest = ^TRecTest;
这结构体1和结构体2有何区别?
疑问二:
结构体的内存申请与释放
procedure Test;
var
PRecTest:PTRecTest;
begin
new(PRecTest);
PRecTest.iAge:=11;
PRecTest.sName:='MyName';
dispose(PRecTest);
end;
貌似这样没有问题,但是在有些函数里面显示的调用dispose(PRecTest)这句就会发生内存泄漏,比如把Test放到子线程中执行如果还是用dispose(PRecTest)的话就出现内存泄漏错误导致程序退出,用fastmm进行检查确实是发现UnKnown,这是为何?
像这样的:
var
PRecTest:PTRecTest;
什么时候显示调用dispose(PRecTest);什么时候不用显示调用dispose(PRecTest);
------解决方案--------------------
1.没区别,都是结构体指针
2.手动申请了内存,最好不用的时候要释放它
(当然你的计算机内存够大,还看不出来后果来,系统也会帮你回收,但它有个时间段
随着泄漏的内存越积越大,最终会令系统塴溃)
一般是谁申请谁负责释放,用在线程时,因为线程有可能未结束,所以可以让线程释放或者在关闭程序时释放
------解决方案--------------------
老大,你这问题数据和你的问题分数严重不太对应,刚上班忙。没细看
指针是用dispose进行释放的。难道是你线程中还在使用这个地址?
疑问一:
结构体1
type
PTRecTest = ^TRecTest;
TRecTest = record
iAge:Integer;
sName:array[0..29] of char;
end;
结构体2
type
TRecTest = record
iAge:Integer;
sName:array[0..29] of char;
end;
PTRecTest = ^TRecTest;
这结构体1和结构体2有何区别?
疑问二:
结构体的内存申请与释放
procedure Test;
var
PRecTest:PTRecTest;
begin
new(PRecTest);
PRecTest.iAge:=11;
PRecTest.sName:='MyName';
dispose(PRecTest);
end;
貌似这样没有问题,但是在有些函数里面显示的调用dispose(PRecTest)这句就会发生内存泄漏,比如把Test放到子线程中执行如果还是用dispose(PRecTest)的话就出现内存泄漏错误导致程序退出,用fastmm进行检查确实是发现UnKnown,这是为何?
像这样的:
var
PRecTest:PTRecTest;
什么时候显示调用dispose(PRecTest);什么时候不用显示调用dispose(PRecTest);
------解决方案--------------------
1.没区别,都是结构体指针
2.手动申请了内存,最好不用的时候要释放它
(当然你的计算机内存够大,还看不出来后果来,系统也会帮你回收,但它有个时间段
随着泄漏的内存越积越大,最终会令系统塴溃)
一般是谁申请谁负责释放,用在线程时,因为线程有可能未结束,所以可以让线程释放或者在关闭程序时释放
------解决方案--------------------
老大,你这问题数据和你的问题分数严重不太对应,刚上班忙。没细看
指针是用dispose进行释放的。难道是你线程中还在使用这个地址?