在我的Delphi7中这段代码
var MStr: TMemoryStream;
...
FreeAndNil(MStr);
MStr.Size:=0;
Run Code Online (Sandbox Code Playgroud)
在模块"Project1.exe"中的地址0041D6D1处生成AV:访问冲突.读取地址00000000.但是有人坚持认为不管怎么说都不应该引起任何例外.他还说他的Delphi 5确实没有例外.他称之为"陈旧的指针错误".换句话说,他说FreeAndNil不能用作调试器来检测释放对象或使用释放对象的双重尝试.
任何人都可以开导我吗?如果这个引发错误(总是/随机)或程序应该没有问题地运行这个错误?
谢谢
我问这个是因为我相信我的程序中有一个"双重免费对象"或"免费且重新访问"的错误.在释放对象后,如何用零填充分配给对象的内存?我希望这种方式通过获取和AV来检测bug的位置.最初,我希望如果我将对象设置为FreeAndNil,我将在尝试重新访问它时始终获得AV.
delphi ×2