请问几个类似的的API的区别还有用法
IsBadCodePtr
IsBadHugeReadPtr
IsBadHugeWritePtr
IsBadReadPtr
IsBadStringPtr
IsBadWritePtr
//下面的例子为什么测试错误?
procedure TForm1.Button1Click(Sender: TObject);
var
TB: TForm;
begin
TB := TForm.Create(nil);
// Form2.Show;
TB.Free;
if not IsBadCodePtr(TB) and (PPointer(TB)^ = Pointer(TForm)) then
begin
//应该是内存不存在了啊,怎么还会执行到这里?
TB.Free;
end;
end;
谢谢各位大哥,希望能帮我下这几个API究竟是怎么样的,我要判断一个对象或者内存有没有创建请问怎么来判断呢?
[解决办法]
to kiboisme
如果按楼主前面的做法,对象变量是在方法里声明,也就是局部变量。那么此方法是否还有效呢?这个地方值得怀疑。
[解决办法]
代码已经考虑了局部变量的情况,而且这是完整研究了System.pas以及GETMEM.INC给出的代码,只要不是刻意构造,该函数不会出问题.刻意构造地址,可能让函数判断出错.