这是因为有时为了避免内存泄露,用do{ }while(0)执行块内的语句,然后跳出循环块,统一释放内存,具有特殊意义。例如:
#include
#include
int func(int n)
{
int i = 0;
int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);
do
{
if( NULL == p ) break;
if( n < 0 ) break;
for(i=0; i
{
p[i] = i;
printf("%d\n", p[i]);
}
ret = 1;
}while(0);
free(p);
return ret;
}
int main()
{
if( func(10) )
{
printf("OK");
}
else
{
printf("ERROR");
}
}
如果改为这样:
#include
#include
int func(int n)
{
int i = 0;
// int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);
// do
// {
if( NULL == p ) return 0;
if( n < 0 ) return 0; //每次return后p的内存还没释放,就会内存泄露
free(p); //加上这个释放就解决问题,但当函数有很多个时候,就得写很多次free,一不小心就会导致内存泄露
for(i=0; i
{
p[i] = i;
printf("%d\n", p[i]);
}
ret = 1;
// }while(0);
free(p);
return ret;
}
int main()
{
if( func(10) )
{
printf("OK");
}
else
{
printf("ERROR");
}
}
阅读(1365) | 评论(0) | 转发(0) |