如何防止发生这样的异常

ppzine 2006-05-15 11:22:05
CHttpFile *file;
try
{
//
}catch(CException *e)
{
e->Delete();

}
file->Close();//程序总是在这儿出错
delete file;
...全文
183 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
会思考的草 2006-05-15
  • 打赏
  • 举报
回复
检查一下在出错的地方你的file指针是否指向正确的CHttpFile对象。
pomelowu 2006-05-15
  • 打赏
  • 举报
回复
CHttpFile *file = NULL;
try
{
//
}catch(CException *e)
{
e->Delete();

}
if (file)
{
file->Close();
delete file;
}
尘雨 2006-05-15
  • 打赏
  • 举报
回复
CInternetSession::OpenURL
Returns a file handle for FTP, GOPHER, HTTP, and FILE-type Internet services only. Returns NULL if parsing was unsuccessful.

返回的是文件句柄,实际也就是一个可以指针了,成功了,那么自然非NULL,不成功,则是NULL

你的调用,发生异常了吗,也就是
catch{}执行到了吗?如果有Exception,httpfile指针指向的是否有效,不一定,如果try{}里都有异常,那么最好检查一下异常出现在什么地方

另外判断的时候用if (file==NULL)
ppzine 2006-05-15
  • 打赏
  • 举报
回复
真是奇怪
CHttpFile *file = NULL;
try
{
//
}catch(CException *e)
{
e->Delete();

}
if (file)//这样写就出错
{
file->Close();
delete file;
}
if (!file)//这样写就不出错
{
file->Close();
delete file;
}

明明file己经不为空了
尘雨 2006-05-15
  • 打赏
  • 举报
回复
CHttpFile *httpfile=NULL;
CInternetSession inetsession;
try
{
.......
httpfile->Close ();
delete []httpfile;
// delete httpfile;
inetsession.Close();
}
catch(...)
{
return -1;
}
可以放到try{}里试验一下,当然如果放在外面,检查一下httpfile==NULL?这样,就知道是否得到一个已经打开的httpfile
另外delete [] httpfile;这样处理比较好

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧