我申请了内存如下:
GetMem(OrgAddr,32);
GetMem(DestAddr,20);
GetMem(UserData,140);
GetMem(sMsgID,23);
GetMem(TimeStamp,20);
GetMem(sSubmitDate,11);
GetMem(sDoneDate,11);
GetMem(sStatus,80);
用完后释放:
if OrgAddr <>nil then dispose(OrgAddr);
if DestAddr <>nil then dispose(DestAddr);
if UserData <>nil then dispose(UserData);
if sMsgID <> nil then dispose(sMsgID);
if TimeStamp <>nil then dispose(TimeStamp);
if sSubmitDate <> nil then dispose(sSubmitDate);
if sDoneDate <> nil then dispose(sDoneDate);
if sStatus <> nil then dispose(sStatus);
但总在释放的时候报 'Invalid pointer operation'错误,是什么原因呢, 大家帮看看
GetMem(OrgAddr,32);
GetMem(DestAddr,20);
GetMem(UserData,140);
GetMem(sMsgID,23);
GetMem(TimeStamp,20);
GetMem(sSubmitDate,11);
GetMem(sDoneDate,11);
GetMem(sStatus,80);
用完后释放:
if OrgAddr <>nil then dispose(OrgAddr);
if DestAddr <>nil then dispose(DestAddr);
if UserData <>nil then dispose(UserData);
if sMsgID <> nil then dispose(sMsgID);
if TimeStamp <>nil then dispose(TimeStamp);
if sSubmitDate <> nil then dispose(sSubmitDate);
if sDoneDate <> nil then dispose(sDoneDate);
if sStatus <> nil then dispose(sStatus);
但总在释放的时候报 'Invalid pointer operation'错误,是什么原因呢, 大家帮看看
解决方案 »
- 谁能详细的给我解释一下这些代码?
- 要在repeate中显示“没有您需要的数据”,要怎么写呢?
- 动态创建窗口的问题,CreateForm!希望有高手帮忙啊!
- 在TreeView添加子节点闪烁的问题,我觉得又不会有人来回答了,delphi版啊?诶
- fastreprot中怎样使报表有网格,并且报表须要动态生成字段?在线结分!拜托各位了!
- 问个有关组件的问题,请高手回答,急!!!!!!!!!!!
- 高分征求贪食蛇游戏的源代码,
- KV3000的文件夹浏览器,(文件夹前带方框)如何制作,是否有这样的控件?
- 请问有什么方法可以增加可用分!好可怜,我没分了!
- 局域网中做了个BBS,想以附件的形式添加word文档的方法有吗?
- IdTCPClient中memorystream 的接收问题!急+郁闷!一晚上没折腾出来!
- 高分求看!!为什么运行不稳定,总报invaid pointer operation错误 ??
而不是dispose,dispose是释放指针
如果是不定长的数据结构,使用GetMem--FreeMem进行分配和释放
OrgAddr,DestAddr,UserData,TimeStamp:PChar;
sMsgID,sSubmitDate,sDonedate,sStatus:PChar;所以用 GetMem FreeMem 应该可以啊,不是这个问题啊
var F: file;
Size: Integer;
Buffer: PChar;
begin
AssignFile(F, 'test.txt');
Reset(F, 1);
try
Size := FileSize(F);
GetMem(Buffer, Size);
try
BlockRead(F, Buffer^, Size);
ProcessFile(Buffer, Size);
finally
FreeMem(Buffer);
end;
finally
CloseFile(F);
end;end;采用这个方法不需要判断if OrgAddr <>nil then
1、你申请的内存没有初始化,这样可能导致FreeMem释放的时候(以\0结尾)多余释放了不需要释放的内存!!!
2、使用FreeMem,最好制定释放数据的长度,这样就可以避免上面由于没有初始化内存所产生的错误!!!
而且GETMEM()对应FREEMEM释放