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;
}