Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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 (AllocMem和GetMem)故障_Delphi_Winapi - Fatal编程技术网

Delphi (AllocMem和GetMem)故障

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; ... 分配的指针将仅在程序关闭时释放 没有可分配的最大指针数。如果内存管理器找不到合适的内存块,动态内存分配可

是否有可以分配的最大指针数?我正在研究一个函数,它将各种指针分配给各种记录。未计算数量(x)后,AllocMem函数分配一个指针,覆盖现有指针。有人有小费吗

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类型成员)。