VC++6.0(SP6)
编译连接没有错误和警告,调试运行所有菜单也都没有错。但是直接运行后点其中一个菜单时就出现内存不能读的致命错误。
通过文件输出跟踪错误,错误发生在一个pElement=new double[m_Num]的地方。
内存泄漏问题查了,没发现问题。
编程菜鸟,请高手指点!困扰多时。
编译连接没有错误和警告,调试运行所有菜单也都没有错。但是直接运行后点其中一个菜单时就出现内存不能读的致命错误。
通过文件输出跟踪错误,错误发生在一个pElement=new double[m_Num]的地方。
内存泄漏问题查了,没发现问题。
编程菜鸟,请高手指点!困扰多时。
解决方案 »
- visual studio 2005网络编程 之sniffer
- VS2003怎么注册进程外组件?
- 扩展dll,没有消息循环,却可以正常的被调用?(100分,求高手)
- 希望大家指点下问题。
- cout 和 控制台的关联
- openssl安装问题
- 从一个文件夹中读入多幅图像并进行处理
- 在Win32 Application下用API创建了一个窗口,如何在这个窗口上添加ToolBar,如何响应?
- 大事不好,当地电信打算用硬件禁止ADSL多机共亨上网,咱们老百姓以后怎么办?
- 用DLL作为远程组件服务器,组件里面接口函数执行时,是耗费远程机器的资源吗?
- 如何在对话框中,为按钮添加一张图片->请进
- 求本VC++学习OpenGL的好书
删除时是否使用delete []pElement;
你这个地方都用的不好哟,m_Num 应该为const 常量哟,不能用变量。 delete [] pElement;
pElement=NULL;
AfxMessageBox("dfdfdf");改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。
解释一下,在用New分配空间的时候,有一个问题,后面的m_Num如果为变量,那面你在前面肯定是定义了一个int型的m_Num变量 ,此时我不清楚m_Num是否赋过值,如果没有赋值,那问题的原因就很简单了,很可能是m_Num被分配的地址空间在上次的使用后还没有被释放,那里面的值也就是仍然存在,导致溢出或其他原因。
这种分配空间的方式是很不推荐的。最好把m_Num改为定值。或者直接就为空。
你可以先把m_New修改成一个定值,然后高度一下程序看下结果。
我输出m_Num看了一下,值是90,没异常。恩,改成定值,等会修改一下。
但是这个程序也洋洋洒洒的写了几万行了,感觉比较乱,像这种无法跟踪的问题根本就没办法解决。
请大家继续讨论。 double *pdBuf,*pdBuf1,*pElement;
double *Dis,*Vec,*Acc,*Load,*dX;// m_Num=2;
Dis=new double[m_Num];
Vec=new double[m_Num];
Acc=new double[m_Num];
for(loop=0;loop<m_Num;loop++)
{
Dis[loop]=m_Dis_1[loop];
Vec[loop]=m_Vec_1[loop];
Acc[loop]=m_Acc_1[loop];
} pdBuf=new double[m_Num];
pdBuf1=new double[m_Num];
pElement=new double[m_Num]; //出错了
Load=new double[m_Num];
dX=new double[m_Num+1];
for(loop=0;loop<m_Num;loop++)
{
pdBuf[loop]=0.0;
pdBuf1[loop]=0.0;
pElement[loop]=0.0;
}
...
delete [] pdBuf;
delete [] pdBuf1;
delete [] pElement;
delete [] Dis;
delete [] Vec;
delete [] Acc;
delete [] Load;
delete [] dX;
pdBuf = new double[m_Num];前加个判断if (m_Num < 0|| m_Num > 20000)
AfxMessageBox("God is a girl!");
else
pdBuf = new double[m_Num]; // here, god is a man.呵呵
我估计会有弹出"God is a girl"的时候。
风格不太好 你应该这样吧
pElement=new double[m_Num]
if(pElement != NULL)
{
pElement = NULL;
}
方便一下 用NULL了!
我试了debug,release,都没你说的问题.程序我没看明白.我操做是出过内存不可写的错.