userpro / MemoryPool

一个极简内存池实现
MIT License
276 stars 96 forks source link

mem leak #12

Closed gongweixue closed 9 months ago

gongweixue commented 2 years ago
MemoryPool* MemoryPoolInit(mem_size_t maxmempoolsize, mem_size_t mempoolsize) {
    if (mempoolsize > maxmempoolsize) {
        // printf("[MemoryPool_Init] MemPool Init ERROR! Mempoolsize is too big!
        // \n");
        return NULL;
    }

    MemoryPool* mp = (MemoryPool*) malloc(sizeof(MemoryPool));
    if (!mp) return NULL;

    mp->last_id = 0;
    if (mempoolsize < maxmempoolsize) mp->auto_extend = 1;
    mp->max_mem_pool_size = maxmempoolsize;
    mp->total_mem_pool_size = mp->mem_pool_size = mempoolsize;

#ifdef _Z_MEMORYPOOL_THREAD_
    pthread_mutex_init(&mp->lock, NULL);
#endif

    char* s = (char*) malloc(sizeof(_MP_Memory) +
                             sizeof(char) * mp->mem_pool_size);
    if (!s) return NULL;                       //HERE!!!!!!!!!!!!!!!!!!!!, leads mem leak as mp is not free yet :-)
    ......
}
userpro commented 9 months ago

感谢指出,fixed