我的过程定义了几个pchar型的指针
然后分配内存
getmem(p1,256);
getmem(p2,256);
getmem(p3,256);
...
经过一系列操作后
发现p1,p2被优化了,
释放时
freemem(p1);
freemem(p2);
结果出错,说无效指针操作。请问怎么办?
然后分配内存
getmem(p1,256);
getmem(p2,256);
getmem(p3,256);
...
经过一系列操作后
发现p1,p2被优化了,
释放时
freemem(p1);
freemem(p2);
结果出错,说无效指针操作。请问怎么办?
解决方案 »
- delphi操作字符串
- 已知一个窗口的句柄SessionHwnd,如何调用该窗口类的一个过程啊?
- 有点难度,关机查询。
- ADO + Access 使用Create View语句时出错.
- 在ComboBox绑定这也错了吗?请高手出来指点啊!(内有源码)
- InstallShield Developer 8.02如何支持中文?
- 请问数据库的锁定与解锁
- delphi运行外部程序并等待外部程序运行完毕,并不是结束
- 怎么用DELPHI实现RS232串口通讯实现一次发送九位信息?谢谢,急急急!
- DELPHI XE5中编辑出错,请问可能是什么原因
- 菜鸟问题两个:1、fieldbyname('xx').AsFloat:=xxxx; ……每题25分!
- 请问DELPHI里没有定义的API函数该怎么办啊?
variable 'p1' inaccessible here due to optimization
variable 'p2' inaccessible here due to optimization
当你给他分配内存之前,你freemem()是没问题的,
当分配完以后,你freemem()是没问题的,
然后你再freemem()就出错了,可能是该内存已经释放掉了,
你再去释放的话,他就找不着了或者这一段内存已分配给
别人了,而无法操作(我也不太明白),
不过,我想你可能不小心freemem()了两次
p1 ,p2 两个指针的值被修改,你再用FreeMem去释放就会出错。
看看p1,p2两个指针的值与初始值是否一样。
var
p1,p2,p3 : PChar;
begin
getmem(p1,256);
getmem(p2,256);
getmem(p3,256);
copymemory(p1,Pchar('ha ha ha'),9);
//Inc(p1);修改p1,p2的值,就会报无效的指针操作错误
//Inc(p2);
freeMem(p1);
freeMem(p2);
freeMem(p3);
end;
str:string;
getmem(p1,256);
getmem(p2,256);
str:='qqq';
p1:=pchar('www');
str:=str+p1; //此处该如何写?
showmessage(str);
freemem(p1);
freemem(p2);
不知道怎么解决?
Var
P1, P2, P3 : pChar;
Begin
GetMem(P1, 255);
P1 := 'ABCD'; //错误的赋值方法
FreeMem(P1); //这种情况下100%会出错. GetMem(P2, 5);
GetMem(P3, 255);
StrCopy(P2, '123456789ABCDEFFGGGG'); //赋值超过了长度.
FreeMem(P2); //不会出错
FreeMem(p3); //一般情况下会出错.因为P3的内存紧接着P2后面.而刚才对P2赋值超出了空间,也就是写到P3的配置上了.//另外一种对pChar的赋值方法. P1[0] := 'A'; P1[1] := 'B'End;
getmem(...)
dispose(...)