liuyeid 发表于 2015-02-06 22:40

linux下ralloc的问题

本帖最后由 liuyeid 于 2015-02-08 21:34 编辑

写程序的时候发现第一次malloc的太小的话,对malloc 做 realloc 会coredump。
并且确定是第一次malloc的的太小,因为只要调大第一次malloc的大小 在realloc就没有问题。
这个大小有明确的值吗?

大家都说要求贴代码,但是只能贴报错的那部分,整个代码有2k行左右
typedef struct {
    char name;   
    intact_start;/*action数组的起始*/
    intact_end;
}boalog_logger_t;


ps:g_log_init_logger是全局变量,刚开始为2,发现在resize_logger里面realloc的时候出现因为11信号出现coredump,gdb调试发现g->logger的地址没有问题,mlen大小也是正常的。是在找不到问题,然后去网上搜索(google的),然后看到有因为分配内存太小导致的问题,后来就把g_log_init_logger改为了5,就没有报错了(这里我确定是调用了realloc了,这个时候我配置了8个logger)
/*
* @param g
* @param len
* return >0 重新申请的内存大小
*      <0 realloc失败
* desc:重新调整logger的大小
*/
static int resize_logger(boalog_global_t *g)
{
    int i, mlen;
    mlen = sizeof(boalog_logger_t) * g_log_init_logger;
    g_log_init_logger *= 2;
    g->logger = realloc((g->logger), mlen*2);
    if(g->logger == NULL)
      return -1202;
    memset((char *)(g->logger)+mlen, 0, mlen);
    for(i = g_log_init_logger/2; i < g_log_init_logger; i++)
      g->logger.act_start = -1;

    return mlen*2;
}

MMMIX 发表于 2015-02-07 21:07

回复 1# liuyeid


    贴能重现问题的完整代码出来别人才能知道你到底错在什么地方。

sevenover 发表于 2015-02-08 18:31

LZ把代码贴出来看看。
页: [1]
查看完整版本: linux下ralloc的问题