小心使用定时器时发生的内存泄露

今天实现如下代码:

struct info_t {
 uint32_t id;
 uint32_t count;
};

 

void use_timer(uint32_t uid)
{
    //...

    info_t* info = reinterpret_cast<info_t*>(g_slice_alloc0(sizeof(info_t)));
    info->id = uid;
    info->count = 10;

    timer_handler(info);
}

 

int timer_handler(void* data)
{
    //business process

    //Timer
    if ( info->count == 0 ) {
        g_slice_free1(sizeof(*info), info);
    } else {
        info->count--;
        //下一个定时器, 此处不便透露实现机制
        const timeval* tv = get_now_tv();
        ADD_TIMER_EVENT(timer_handler, info, tv->tv_sec + info->interval);
    }

    return 0;
}

看似没什么问题,内存正常分配,也在定时器中正常删除,但是细细一想,如果删除定时器时info->count还大于0呢?内存就无法删除了,这是个日常比较容易忽略的一个问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值