Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 我需要腾出时间吗?_Delphi - Fatal编程技术网

Delphi 我需要腾出时间吗?

Delphi 我需要腾出时间吗?,delphi,Delphi,它似乎在工作,但我正在抓挠我的头试图找到一个内存泄漏,我不是很擅长这类事情:-( 我实际上并没有调用TDateTime.Create()——而是编译器(意味着我必须在此处释放它)或者,由于TDateTime基本上只是一个双倍体,编译器只是将它推到堆栈上分配给调用者吗?没有什么可以释放的。TDateTime是一个基于Double的简单类型,因此它没有在堆上分配。更有可能是其他带有TDateTime字段的内容正在泄漏“TDateTime基本上只是一个double”——这就是答案。它是“double”

它似乎在工作,但我正在抓挠我的头试图找到一个内存泄漏,我不是很擅长这类事情:-(


我实际上并没有调用
TDateTime.Create()
——而是编译器(意味着我必须在此处释放它)或者,由于
TDateTime
基本上只是一个双倍体,编译器只是将它推到堆栈上分配给调用者吗?

没有什么可以释放的。
TDateTime
是一个基于
Double
的简单类型,因此它没有在堆上分配。

更有可能是其他带有TDateTime字段的内容正在泄漏“TDateTime基本上只是一个double”——这就是答案。它是“double”,你应该像对待“double”一样对待它“.BTW,如果你没有什么werid,那么你就不能释放它。UNIX\u START\u DATE.free是否可以编译?+1@Arioch'The-是的,它编译、运行并做它应该做的事情。我只是在抓救命稻草,试图找到漏洞。除了TDateTime有一个构造函数之外,我甚至不会问这个问题。”(我没有检查-double?)我在很长一段时间内缩小了内存不足异常的范围,并且fn()会在计时器到期时定期被调用。我只是想知道。它有一个构造函数?你有哪个delphi版本?构造函数的代码是什么?顺便说一句,一般来说,按“retag”会很好将delphi版本标记链接并添加到问题中,如果您暂停此函数泄漏-只需单独运行无数次,看看是否泄漏。或者打开CPU窗口并读取其转换为的机器代码-是否分配内存:-)挑剔:它们可以用
New
GetMem
@DavidHeffernan:
PDateTime
在堆上分配,当然,就像任何其他指针类型一样。我不认为这是这里的主题。只是列出一些类似于
TDateTime
的类型,它们不需要创建/销毁,
TTime
TCap操作
THandle
TNotifyEvent
TRtlCriticalSection
,等等。有些被用作指针,因此需要在标准外部接口之外创建/销毁。例如,创建Windows画布句柄并释放它。唯一可以创建的是某种类(或对象),以及在Delphi的更高版本中,在记录中。
const UNIX_START_DATE: TDateTime = 25569.0;

function UnixToDateTime(USec: Longint): TDateTime;
begin
  Result := (Usec / 86400) + UNIX_START_DATE;
end;