Delphi (AllocMem和GetMem)故障
是否有可以分配的最大指针数?我正在研究一个函数,它将各种指针分配给各种记录。未计算数量(x)后,AllocMem函数分配一个指针,覆盖现有指针。有人有小费吗Delphi (AllocMem和GetMem)故障,delphi,winapi,Delphi,Winapi,是否有可以分配的最大指针数?我正在研究一个函数,它将各种指针分配给各种记录。未计算数量(x)后,AllocMem函数分配一个指针,覆盖现有指针。有人有小费吗 function NewObject(ID: Integer): boolean; Var P: PNewObject; begin P:= Allocmem(SizeOf(TNewObject)); P^.ID:= ID; ... 分配的指针将仅在程序关闭时释放 没有可分配的最大指针数。如果内存管理器找不到合适的内存块,动态内存分配可
function NewObject(ID: Integer): boolean;
Var P: PNewObject;
begin
P:= Allocmem(SizeOf(TNewObject));
P^.ID:= ID;
...
分配的指针将仅在程序关闭时释放 没有可分配的最大指针数。如果内存管理器找不到合适的内存块,动态内存分配可能会失败。在该场景中,
OutofMemory
被引发
未计算数量(x)后,AllocMem函数分配一个指针,覆盖现有指针
不,事实并非如此。动态内存分配功能永远不会返回已在使用的内存块
听起来好像您的程序分配了,但从未取消分配。如果您手头有一个垃圾收集器,那么这可能是一个站得住脚的方法,但您的情况并非如此。也许在完成内存时需要考虑解除分配。 没有可分配的最大指针数。如果内存管理器找不到合适的内存块,动态内存分配可能会失败。在该场景中,
OutofMemory
被引发
未计算数量(x)后,AllocMem函数分配一个指针,覆盖现有指针
不,事实并非如此。动态内存分配功能永远不会返回已在使用的内存块
听起来好像您的程序分配了,但从未取消分配。如果您手头有一个垃圾收集器,那么这可能是一个站得住脚的方法,但您的情况并非如此。也许在完成内存时需要考虑解除分配。 根据文档,
如果没有足够的内存来分配块,则会引发EOutOfMemory异常
。换句话说,allocem()
不会“覆盖现有指针”。也就是说,对于记录/类类型,尝试使用New()
,而不是直接使用AllocMem()
或GetMem()(除非TNewObject`只包含POD类型的成员)。从文档中可以看出,如果没有足够的内存分配块,则会引发OutofMemory异常,AllocMem()
不会“覆盖现有指针”。也就是说,对于记录/类类型,请尝试使用New()
而不是直接使用AllocMem()
或GetMem()(除非TNewObject`只包含POD类型成员)。