c语言编程常见问题解析(资源泄漏)

1内存泄漏
1.1.1 示例
(1)问题描述
通过 malloc 等函数动态申请的内存在使用后必须相应地调用 free 等函数释放,否 则这块内存就不能被再次使用,出现内存泄漏,示例如下:

示例一
在这里插入代码片` 
int my_example(int c) 
{  
    void *p = malloc(10);  
    if(c)  
    { 
           return -1;   /*"p" 指向的内存被泄漏*/ 
    }                              
    free(p); 
    return 0;
 }

示例二:
int wrong_check() 
{  
   void *p = malloc(10);  
   void *q = malloc(20); 
   if((NULL == p) || (NULL == q)) 
   { 
          return -1;
           /*"p" or "q" 其中之一为 NULL 时,另外一个指向的内存被泄漏*/ 
   }   
  free(q);
  free(p);
  return 0;
} 
 
示例三:
int test(int i) 
{
    void *p = malloc(10);
    void *q = malloc(4);
    if(i > 0)
    { 
          p = q;      /* “p”被重新赋值,指向新的地址,之前指向的内存被泄漏*/
    } else
    {
          free(q);
    } 
  free(p);
  return 0; 
}

(2)防范措施

  1. 每次申请内存前必须明确由谁负责释放,何时释放,在何处释放;
  2. 在异常分支中,保持清醒,一定要在 return 语句前考虑是否要释放内存;
  3. 内存申请后立即检查是否申请成功,不要多个指针用同一个 if 语句判断; 4) 申请内存成功后,禁止对指向给内存地址的指针重新赋值。

2,

你可能感兴趣的:(调试总结)