菜鸟关于vc内存问题求救!

lwys2 2008-06-11 03:23:20
VC++6.0(SP6)
编译连接没有错误和警告,调试运行所有菜单也都没有错。但是直接运行后点其中一个菜单时就出现内存不能读的致命错误。
通过文件输出跟踪错误,错误发生在一个pElement=new double[m_Num]的地方。
内存泄漏问题查了,没发现问题。
编程菜鸟,请高手指点!困扰多时。
...全文
210 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqssbb123 2008-06-22
  • 打赏
  • 举报
回复
补上说一下,在debug ,release 下都出错.
qqssbb123 2008-06-22
  • 打赏
  • 举报
回复
我试了,没有你说的问题???
我试了debug,release,都没你说的问题.程序我没看明白.我操做是出过内存不可写的错.
qqssbb123 2008-06-22
  • 打赏
  • 举报
回复
我试了,没有你说的问题???
疯石头 2008-06-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lwys2 的回复:]
if(pElement=new double[m_Num])
AfxMessageBox("dfdfdf");

改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。
[/Quote]

风格不太好 你应该这样吧
pElement=new double[m_Num]
if(pElement != NULL)
{
pElement = NULL;
}
方便一下 用NULL了!
疯石头 2008-06-16
  • 打赏
  • 举报
回复
我想可能是野指针的问题!随便修改内存的值当然会报复一下你了!
龙凤呈祥焱 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lwys2 的回复:]
if(pElement=new double[m_Num])
AfxMessageBox("dfdfdf");

改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。
[/Quote]

不会是你的内存分配语句被写到死循环里面了吧???
jiqing_gao 2008-06-13
  • 打赏
  • 举报
回复
你把这句注解掉,然后给pElement赋值一个常量,看看再说
sacrtap 2008-06-13
  • 打赏
  • 举报
回复
你这个错误是基础的语法错误,最好在看下基础教程中关于New的章节。
sacrtap 2008-06-13
  • 打赏
  • 举报
回复
pElement=new double[m_Num]
解释一下,在用New分配空间的时候,有一个问题,后面的m_Num如果为变量,那面你在前面肯定是定义了一个int型的m_Num变量 ,此时我不清楚m_Num是否赋过值,如果没有赋值,那问题的原因就很简单了,很可能是m_Num被分配的地址空间在上次的使用后还没有被释放,那里面的值也就是仍然存在,导致溢出或其他原因。
这种分配空间的方式是很不推荐的。最好把m_Num改为定值。或者直接就为空。
你可以先把m_New修改成一个定值,然后高度一下程序看下结果。
lwys2 2008-06-13
  • 打赏
  • 举报
回复
if(pElement=new double[m_Num])
AfxMessageBox("dfdfdf");

改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。
雨中的月儿 2008-06-13
  • 打赏
  • 举报
回复
呵呵,给你个建议


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"的时候。
season030441 2008-06-13
  • 打赏
  • 举报
回复
看看是不是m_Num是负的
lwys2 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 wutaihua 的回复:]
引用 21 楼 lwys2 的回复:
if(pElement=new double[m_Num])
AfxMessageBox("dfdfdf");

改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。

如果我没有猜测的话,你是用过量的,虽然单看这句,你没有越界,但是你循环调用了这句,你看看是不是什么地方掉入循环了,这样如果一直申请而没有释放的话,很容易就搞的内存(在VC开发平台允许范围内)耗费殆尽了
[/Quote]
看任务管理器里面内存变化也不大,才占几十M的内存
wutaihua 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lwys2 的回复:]
if(pElement=new double[m_Num])
AfxMessageBox("dfdfdf");

改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。
[/Quote]
如果我没有猜测的话,你是用过量的,虽然单看这句,你没有越界,但是你循环调用了这句,你看看是不是什么地方掉入循环了,这样如果一直申请而没有释放的话,很容易就搞的内存(在VC开发平台允许范围内)耗费殆尽了
lwys2 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 qushaobo 的回复:]
这是我的邮箱:pingxingxianduan@163.com有空了发一下.我觉得你说的现象不是一个地方的问题.不过用NEW分配内存,对数组长度最好用常量.调试下对一些变量,调试器会对其初始化.要局体找原因的话,最好给一下代码.
[/Quote]

已发,请抽空帮忙看看。
qqssbb123 2008-06-13
  • 打赏
  • 举报
回复
这是我的邮箱:pingxingxianduan@163.com有空了发一下.我觉得你说的现象不是一个地方的问题.不过用NEW分配内存,对数组长度最好用常量.调试下对一些变量,调试器会对其初始化.要局体找原因的话,最好给一下代码.
lwys2 2008-06-13
  • 打赏
  • 举报
回复
谢谢各位解答,没有系统学过程序设计,呵呵用vc写程序纯属赶鸭子上架。
但是这个程序也洋洋洒洒的写了几万行了,感觉比较乱,像这种无法跟踪的问题根本就没办法解决。
请大家继续讨论。

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;



lwys2 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 aaronwang81 的回复:]
引用 21 楼 lwys2 的回复:
if(pElement=new double[m_Num])
AfxMessageBox("dfdfdf");

改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。


不会是你的内存分配语句被写到死循环里面了吧???
[/Quote]

没有,要是这样的话,调试运行也是过不了的。
lwys2 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sacrtap 的回复:]
pElement=new double[m_Num]
解释一下,在用New分配空间的时候,有一个问题,后面的m_Num如果为变量,那面你在前面肯定是定义了一个int型的m_Num变量 ,此时我不清楚m_Num是否赋过值,如果没有赋值,那问题的原因就很简单了,很可能是m_Num被分配的地址空间在上次的使用后还没有被释放,那里面的值也就是仍然存在,导致溢出或其他原因。
这种分配空间的方式是很不推荐的。最好把m_Num改为定值。或者直接就为空。
你可以先把…
[/Quote]

我输出m_Num看了一下,值是90,没异常。恩,改成定值,等会修改一下。
zsycloud 2008-06-12
  • 打赏
  • 举报
回复
是不是你在其他的线程中已经释放了这个pElement指针呢?
加载更多回复(19)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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