最近接手一个程序,多文档界面,有些界面监控Socket消息,偶尔出现一个问题,打开一些窗口,过上一段时间未操作,之后再打开窗口时出现地址访问非法,已经定位好几天了,想了很多办法,跟踪调用堆栈为:MyForm.Show->TCustomForm.SetVisible->TCustomForm.SetWindowToMonitor,用madExcept跟踪的,最后的错误在SetWindowToMonitor方法中,应该可以断定MyForm本身不是nil,否则SetVisible执行马上就会出现地址访问非法,请高手解答,不胜感激。
解决方案 »
- 怎样防止Treeview自动触发onchange事件?
- delphi是否有内部类?
- 怎么判断一个文件夹中有几张图片,并分别用Timage打开这些图片,急啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 大家好,我怎么才能做到在一个图像上动态标注呀?
- flyingkiller(大飞虫)接100
- 帮帮我...没分了,
- 请问各位,要想达到delphi中高级水平应看看那些书(中文)?50分相送
- 请问有高手给我提供一个收发传真(Fax)的程序范例代码吗?高分求教!
- 请帮我找错:
- vc做的dll返回值是char* ,delphi调用后内存泄漏
- 谁知道borland正版化机构是个啥东东?
- 菜问一个关于ComboBox的问题
Show之前判断一下
if (not Assigned(AForm)) or (AForm <> nil) then
AForm := TAForm.Create();
AForm.Show;Close或者Destroy的同样要处理一下
if not Assigned(Form2) then begin
Form2:=TForm2.Create(Self);
Form2.Show;
end else
Form2.BringToFront;另外在MDIChild的OnClose, OnDestroy中要以下代码 Form2为MIDChild窗体的名称
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2:=nil;
end;
设个断点,用单步调试慢慢找吧
如果没有什么问题的话,
就是你的MYFORM 里访问了无效的内存。
这个问题我遇到过。