首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

下面这么free有无有关问题

2013-08-01 
下面这么free有无问题现在有一个结构体typedef struct result_tag{int numunsigned char*imgunsigned ch

下面这么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);

热点排行