在开始之前,我想指出的是,我已经通过谷歌进行了这样的事情,并且无法找到一个,我已经诚实而真实地搜索过.
我要求(对于我正在开发的项目)列出所有Delphi(2007年到最新发布的版本,我不再支持2007年以前的任何版本)"语言功能",以及它们被引入的版本和(在适用的情况下)弃用,改进或删除.
我之前已经在Stack Overflow上注意到类似的问题,尽管其中大部分是以"哪个特征最好"的形式表达的,并且被认为是不合适的.
如果有人知道这样的清单(或有足够的业余时间来编制一个清单),我将非常感激.
接受的答案将包含指向此类列表的链接或列表本身.
type
TSomeRecord = Record
field1: integer;
field2: string;
field3: boolean;
End;
var
SomeRecord: TSomeRecord;
SomeRecAr: array of TSomeRecord;
Run Code Online (Sandbox Code Playgroud)
这是我所拥有的最基本的例子,因为我想重复使用SomeRecord(某些字段保持为空,没有释放所有字段将在重复使用时被转移SomeRecord,这显然是不受欢迎的)我正在寻找一种方法一次释放所有字段.我已经开始string[255]使用ZeroMemory(),这很好,直到它开始泄漏内存,这是因为我切换到string.我仍然缺乏了解原因的知识,但似乎与动态有关.我也在使用动态数组,因此我认为尝试ZeroMemory()任何动态都会导致泄漏.有一天浪费了这一点.我想,我通过使用解决了这个Finalize()上SomeRecord或SomeRecAr之前ZeroMemory(),但我不知道这是正确的做法,或只是我太傻了.
所以问题是:如何一次性解放所有东西?是否存在一些我不知道的单一程序?
换句话说,或者我会建议如何以不同的方式实现这些记录,所以我不需要做出复杂的尝试来释放东西.我已经研究过创建记录New()然后去掉它Dispose(),但我不知道当调用之后的变量Dispose()是未定义的而不是nil 时它意味着什么.另外,我不知道某个type(SomeRecord: TSomeRecord)的变量与指向type()的变量之间的区别是什么SomeRecord: ^TSomeRecord.我现在正在调查上述问题,除非有人能够快速解释,否则可能需要一些时间.
假设您有一个您想要初始化的本地记录:
type
TMyRec=record
Val1, Val2:Integer;
end;
procedure MyProc;
var
MyVar:TMyRec;
begin
// ... ?
WriteLn(Val1,Val2);
end;
Run Code Online (Sandbox Code Playgroud)
除了"手动"设置每个字段外,还有几种方法可以实现.
使用Initialize():
Initialize(MyVar);
Run Code Online (Sandbox Code Playgroud)使用默认值():
MyVar := Default(TMyVar);
Run Code Online (Sandbox Code Playgroud)使用FillChar:
FillChar(MyVar,SizeOf(MyVar),0);
Run Code Online (Sandbox Code Playgroud)定义一个空常量,并将其赋值给var
const cMyVar:TMyVar=();
...
MyVar := cMyVar;
Run Code Online (Sandbox Code Playgroud)以上所有似乎都适用于这个例子.我想你甚至可以定义一个全局变量来初始化它.
但是有一种首选方法吗?或者在某些情况下,不建议使用上述任何一种情况,或者它根本不起作用?
把它短,有什么明确的正确方法TM初始化一个局部堆栈变量?:-)
我知道有一个SecureZeroMemoryC中的功能实现是在定义函数<WinnNT.h>作为RtlSecureZeroMemory函数.
QNS:如何SecureZeroMemory在Delphi中使用?Delphi是否发布了包含该功能的库?我正在使用Delphi 7. Windows.pas只有ZeroMemory但不是SecureZeroMemory.
我正在使用RAD XE7.在我的Delphi应用程序中,我想为Records字段设置默认值.
我尝试了下面的代码,但它没有编译,我知道这是错误的.我还有别的办法吗?
TDtcData = record
TableFormat : TExtTableFormat = fmNoExtendedData;
DTC : integer = 0;
Description : string = 'Dummy';
Status : TDtcStatus;
OccurenceCnt : integer =20;
FirstDTCSnapShot: integer;
LastDTCSnapShot: integer;
end;
Run Code Online (Sandbox Code Playgroud) delphi ×5
c ×1
c++ ×1
default ×1
delphi-2007 ×1
delphi-xe7 ×1
memory ×1
record ×1
records ×1
security ×1