最近调试一个软件,到现场解决问题。 现象是软件过一会就不见了。也不知道是什么时候退出的。还有就是系统蓝屏之后,系统重启。这么奇怪的现象,对我这个门外汉来说,无法理解。
软件闪退,与内存有关吗? 同事高速我,软件退出,与内存有关系。
书上说, new 与delete的关系。 释放内存。 如果不释放呢?
下面是程序。 两重循环,开辟了 几个G的内存。
#include "stdafx.h"
#define MAX 1000
int _tmain(int argc, _TCHAR* argv[])
{
int i, j; for (j = 0; j < MAX; j++) { for (i = 0; i < MAX; i++) new int[10000]; } printf("hihi"); getchar(); return 0;
}
程序运行结果, 确实没有出现 hihi。 界面直接就退出了。 说明,控制台写的程序,new申请的内存,不释放,确实会闪退。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
另外用MFC新建了一个简单的单对话框工程,加一个按钮,关联OnBnClickedButton1函数。
#define MAX 100000
void CmemTestMFC2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
int i, j, k; for (i = 0; i < MAX; i++) { for (j = 0; j < MAX; j++) new int[1000]; }
}
运行的结果是。MFC系统竟然神奇的提示出来了“内存不足”4个字。 意思就是有new内存,不释放。
打开任务管理器,可以看到我创建的工程的名字叫memTestMFC2, 它在任务管理器里面,显示它占的内存,如红色框里面所示, 1812M大小。
从运行效果上看,当点击按钮测试的时候, 就是出现了内存不足的提示框。 这个时候,无论是点击确定,或者右上角的X。 软件界面直接不见了。
结论: MFC里面,内存也会导致界面退出。
是