VC++6.0(SP6)
编译连接没有错误和警告,调试运行所有菜单也都没有错。但是直接运行后点其中一个菜单时就出现内存不能读的致命错误。
通过文件输出跟踪错误,错误发生在一个pElement=new double[m_Num]的地方。
内存泄漏问题查了,没发现问题。
编程菜鸟,请高手指点!困扰多时。

解决方案 »

  1.   

    一行代码如何判断,
    删除时是否使用delete []pElement;
      

  2.   

    delete [] pElement;后还是否指针为NULL,也就是野指针问题。一般这类问题都是使用了野指针
      

  3.   

    pElement=new double[m_Num];
    你这个地方都用的不好哟,m_Num 应该为const 常量哟,不能用变量。 delete [] pElement;
    pElement=NULL;
      

  4.   

         是不是你在其他的线程中已经释放了这个pElement指针呢?
      

  5.   

    m_Num 是int型变量,这样有问题?这种应用在我程序里很多啊
      

  6.   

    m_Num 输出来看看就知道了。最好用常量。
      

  7.   

    if(pElement=new double[m_Num])
    AfxMessageBox("dfdfdf");改成这样的话就一直弹MessageBox,点都点不完。调试运行又没有,弹一下就过去了。怪事情。估计不是这里的问题。
      

  8.   

    pElement=new double[m_Num]
    解释一下,在用New分配空间的时候,有一个问题,后面的m_Num如果为变量,那面你在前面肯定是定义了一个int型的m_Num变量 ,此时我不清楚m_Num是否赋过值,如果没有赋值,那问题的原因就很简单了,很可能是m_Num被分配的地址空间在上次的使用后还没有被释放,那里面的值也就是仍然存在,导致溢出或其他原因。
    这种分配空间的方式是很不推荐的。最好把m_Num改为定值。或者直接就为空。
    你可以先把m_New修改成一个定值,然后高度一下程序看下结果。
      

  9.   

    你这个错误是基础的语法错误,最好在看下基础教程中关于New的章节。
      

  10.   

    你把这句注解掉,然后给pElement赋值一个常量,看看再说
      

  11.   


    我输出m_Num看了一下,值是90,没异常。恩,改成定值,等会修改一下。
      

  12.   

    谢谢各位解答,没有系统学过程序设计,呵呵用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;
      

  13.   

    这是有空了发一下.我觉得你说的现象不是一个地方的问题.不过用NEW分配内存,对数组长度最好用常量.调试下对一些变量,调试器会对其初始化.要局体找原因的话,最好给一下代码.
      

  14.   

    呵呵,给你个建议在
    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"的时候。
      

  15.   


    风格不太好 你应该这样吧
    pElement=new double[m_Num]
    if(pElement != NULL)
    {
    pElement = NULL;
    }
    方便一下 用NULL了!
      

  16.   

    我试了,没有你说的问题???
    我试了debug,release,都没你说的问题.程序我没看明白.我操做是出过内存不可写的错.
      

  17.   

    补上说一下,在debug ,release 下都出错.