您的位置:程序门 -> vc/mfc -> 基础类



内存泄露,急!!!!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


内存泄露,急!!!!
发表于:2007-07-27 15:25:27 楼主
每操作一次,执行一下下面程序。
if   (rbuf)
  {
  delete   []rbuf;
  }
    rbuf=new   char[arrnum*9];
    if   (rbuf1)
    {
    delete   []rbuf1;
    }
    rbuf1=new   char[arrnum*9];
    if   (rbuf2)
    {
    delete   []rbuf2;
    }
    rbuf2=new   char[arrnum*9];
    if   (rbuf3)
    {
    delete   []rbuf3;
    }
    rbuf3=new   char[arrnum*9];
    if   (rbuf4)
    {
    delete   []rbuf4;
    }
  rbuf4=new   char[arrnum*9];
  if   (rbuf5)
  {
  delete   []rbuf5;
  }
    rbuf5=new   char[arrnum*9];
    if   (rbuf6)
    {
    delete   []rbuf6;
    }
      rbuf6=new   char[arrnum*9];
      if   (rbuf7)
      {
      delete   []rbuf7;
      }
    rbuf7=new   char[arrnum*9];
    if   (rbuf8)
    {
    delete   []rbuf8;
    }
  rbuf8=new   char[arrnum*9];
  if   (rbuf9)
  {
  delete   []rbuf9;
  }
    rbuf9=new   char[arrnum*9];
    if   (rbuf10)
    {
    delete   []rbuf10;
    }
  rbuf10=new   char[arrnum*9];
  if   (rbuf11)
  {
  delete   []rbuf11;
  }
    rbuf11=new   char[arrnum*9];
    if   (rbuf12)
    {
    delete   []rbuf12;
    }
      rbuf12=new   char[arrnum*9];
  if   (rbuf13)
  {
  delete   []rbuf13;
  }
    rbuf13=new   char[arrnum*9];
    if   (rbuf14)
    {
    delete   []rbuf14;
    }
    rbuf14=new   char[arrnum*9];
    if   (rbuf15)
    {
    delete   []rbuf15;
    }  
在view里释放内存
delete   [](pdoc-> rbuf);
  pdoc-> rbuf=null;
delete   [](pdoc-> rbuf1);
pdoc-> rbuf1=null;
delete   [](pdoc-> rbuf2);
        pdoc-> rbuf2=null;
      delete   [](pdoc-> rbuf3);
      pdoc-> rbuf3=null;
delete   [](pdoc-> rbuf4);
pdoc-> rbuf4=null;
delete   [](pdoc-> rbuf5);
pdoc-> rbuf5=null;
      delete   [](pdoc-> rbuf6);
      pdoc-> rbuf6=null;
delete   [](pdoc-> rbuf7);
pdoc-> rbuf7=null;
delete   [](pdoc-> rbuf8);
pdoc-> rbuf8=null;
      delete   [](pdoc-> rbuf9);
      pdoc-> rbuf9=null;
delete   [](pdoc-> rbuf10);
pdoc-> rbuf10=null;
delete   [](pdoc-> rbuf11);
pdoc-> rbuf11=null;
delete   [](pdoc-> rbuf12);
pdoc-> rbuf12=null;
delete   [](pdoc-> rbuf13);
pdoc-> rbuf13=null;
delete   [](pdoc-> rbuf14);
pdoc-> rbuf14=null;
delete   [](pdoc-> rbuf15);
pdoc-> rbuf15=null;  
这样出现内存泄露,拿任务观察器看,每操作一次,内存涨一次,不会回落
发表于:2007-07-27 15:34:151楼 得分:0
那就是只分配了没释放啦。
确定释放的语句已经执行了吗????
另外,代码真乱。为什么要在一个地方申请,另一个地方释放???
发表于:2007-07-27 19:12:522楼 得分:0
用工具boundschecker检测没有发现有内存泄露,实际上有
发表于:2007-07-27 20:39:053楼 得分:0
每操作一次,分配一次内存,但并没有执行view中的释放内存的代码。
每次操作完都应该释放内存才对,释放内存的代码不应该放在view中。
发表于:2007-07-27 20:56:324楼 得分:0
你的代码真是乱
----
...
发表于:2007-07-27 22:54:585楼 得分:0
其实   代码并不乱的拉,只是敬佩楼主的敲键盘能力....
编程多了碰上多次重复的东西,脑海里就应该会想到使用循环来帮助你.
这里也是一样,lz可以把指针都放一个数组里,让for循环帮你完成这些代码..

至于内存泄漏,
如果能确定view里的指针   和操作函数里指针是同一个的话,   应该不会有内存泄漏才对..
没看到具体的代码逻辑   不好多说.
发表于:2007-07-28 12:44:066楼 得分:0
呵呵.

用智能指针吧.


快速检索

热门点击