Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315971
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: C/C++

2008-08-06 18:16:47


      今天遇到了这个问题,查了很多资料,
       有的说“内存释放两次引起的”,这个单单从英文的字面意思我也知道是连续释放内存引起的,可是检查了我的程序哪里有释放两次内存的?排除

        有的说是“字符串拷贝”引起的,我的程序只有在打印的时候才用到字符串拷贝,把所有的打印信息都屏蔽了,依然会出现上述情况,排除!
       最后终于发现问题的所在,我的函数!!!
      原来是这样的:

    function_cb(.......)
    {
         p_list newpp = new struct list;     

        while(...)
        {
                newpp->..  =  .. ;
                newpp->..  =  .. ;
               
newpp->..  =  .. ;              


                newpp->next = p_head;    
                 p_head = newpp;
      
}  

      
newpp->..  =  .. ;
     
newpp->..  =  .. ;


      newpp->next = p_head;    
      p_head = newpp;

    return 0;             
    }

       评语:我在while循环里多次用到结构体链表但是就申请了一次空间,显然是空间不够,所以每次用之前就应该申请了,正确的程序如下:

function_cb(.......)
    {
        while(...)
        {
                p_list newpp = new struct list;     
               
                newpp->..  =  .. ;
                newpp->..  =  .. ;
               
newpp->..  =  .. ;              
               
                newpp->next = p_head;    
                 p_head = newpp;

              

}  

     p_list newpp = new struct list;     

     newpp->..  =  .. ;
    
newpp->..  =  .. ;


    newpp->next = p_head;    
    p_head = newpp;

    return 0;             
    }
阅读(9971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~