mfc如何彻底退出进程

我正在做一个项目,其中要实现如下一个问题:在App的InitInstance里面,若检测到一个异常则退出程序,我用ExitProcess(0);可以实现,可是调试的时候发... 我正在做一个项目,其中要实现如下一个问题:在App的InitInstance里面,若检测到一个异常则退出程序,我用ExitProcess(0);可以实现,可是调试的时候发现有很多内存泄漏,因为我的App的属性里面定义很多类,其中有很多分配堆内存的,它们没有得到释放,我应该如何实现退出程序并完美的没有内存泄漏,求指教 展开
 我来答
青鸟中关村专家
推荐于2018-05-17 · 知道合伙人软件行家
青鸟中关村专家
知道合伙人软件行家
采纳数:1734 获赞数:8440
就职于北大青鸟中关村,自2004年踏入北大青鸟这个行业,已经有11年工作经验和8年的培训经验,寓教于乐

向TA提问 私信TA
展开全部
BOOL KillProcessFromName(CString strProcessName)  
{  
    //创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)  
    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
  
    //PROCESSENTRY32进程快照的结构体  
    PROCESSENTRY32 pe;  
  
    //实例化后使用Process32First获取第一个快照的进程前必做的初始化操作  
    pe.dwSize = sizeof(PROCESSENTRY32);  
  
  
    //下面的IF效果同:  
    //if(hProcessSnap == INVALID_HANDLE_VALUE)   无效的句柄  
    if(!Process32First(hSnapShot,&pe))  
    {  
        return FALSE;  
    }  
  
    //将字符串转换为小写  
    strProcessName.MakeLower();  
  
    //如果句柄有效  则一直获取下一个句柄循环下去  
    while (Process32Next(hSnapShot,&pe))  
    {  
  
        //pe.szExeFile获取当前进程的可执行文件名称  
        CString scTmp = pe.szExeFile;  
  
  
        //将可执行文件名称所有英文字母修改为小写  
        scTmp.MakeLower();  
  
        //比较当前进程的可执行文件名称和传递进来的文件名称是否相同  
        //相同的话Compare返回0  
        if(!scTmp.Compare(strProcessName))  
        {  
  
            //从快照进程中获取该进程的PID(即任务管理器中的PID)  
            DWORD dwProcessID = pe.th32ProcessID;  
            HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);  
            ::TerminateProcess(hProcess,0);  
            CloseHandle(hProcess);  
            return TRUE;  
        }  
        scTmp.ReleaseBuffer();  
    }  
    strProcessName.ReleaseBuffer();  
    return FALSE;  
}
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
hw584521314
2012-12-26 · TA获得超过120个赞
知道小有建树答主
回答量:135
采纳率:50%
帮助的人:33.7万
展开全部
你new的那些类应该把析构函数做好,让它释放内存资源,同时,在异常处理函数里面delete你新建的类 就ok了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BomyanDavid
2012-12-26 · 超过25用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:67.1万
展开全部
在APP的InitInstance里面检测到错误就直接返回吧,然后所有的资源在ExitInstance里面去释放
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
极天异云
2012-12-27 · TA获得超过1054个赞
知道小有建树答主
回答量:1170
采纳率:42%
帮助的人:398万
展开全部
这应该不可能,因为你的进程退出了,分配给你进程的内存一定会释放掉。包括你出错被迫强行退出也是一样。
你的内存泄露恐怕和你的代码本身质量问题有关系,和exitProcess没关系。
---------------------------------------------------------------------------------------------------
哈哈哈,管理员不懂在瞎选?可怜的楼主看看这篇文章 http://blog.csdn.net/yangywyangyw/article/details/6132341 只要你的程序退出了,不管你那令人作呕的垃圾代码有多少内存泄露也不管你是如何退出的,操作系统都会回收干净的,如果操作系统不能保证这一点,那操作系统一天要死多少次机才算合格???这都不懂还写什么VC程序!还笑话管理员瞎选呢,哈哈哈,搞笑。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式