读书人

下面这么free有无有关问题

发布时间: 2013-08-01 15:23:18 作者: rapoo

下面这么free有无问题
现在有一个结构体


typedef struct result_tag
{
int num;
unsigned char* img;
unsigned char** accu_img; //保存多帧图像
}result_t, *presult_t;

我在初始化的时候是这样的

int width, height, accu_cnt, i;

width = 704;
height = 576;
accu_cnt = 50;

result_t *result = ( result_t* )malloc( sizeof( result ) );
result->img = ( unsigned char* )malloc( width * height * sizeof( unsigned char ) );
result->accu_img = ( unsigned char** )malloc( accu_cnt * sizeof( unsigned char* ) );
for( i = 0; i < accu_cnt; i++ )
{
result->accu_img[i] = ( unsigned char* )malloc( width * height * sizeof( unsigned char ) );
}

在使用完毕后释放这些内存的时候直接free可以吗

free(result); //这里有没有问题?还是需要先把申请的result->img和result->accu_img释放掉
//再释放result?
resultresult = NULL;

[解决办法]
需要先把申请的result->img和result->accu_img释放掉
[解决办法]
for( i = 0; i < accu_cnt; i++ )
{
free(result->accu_img[i]);
}
free(result->accu_img);
free(result->img);
free(result);
[解决办法]
malloc和free实行的一夫一妻制,malloc申请的次数等于free释放的次数。你只是free一次,肯定有内存泄露。
[解决办法]

malloc(1);
malloc(2);
malloc(3);

free(3);
free(2);
free(1);

读书人网 >C语言

热点推荐