- 论坛徽章:
- 1
|
本帖最后由 liuyeid 于 2015-02-08 21:34 编辑
写程序的时候发现第一次malloc的太小的话,对malloc 做 realloc 会coredump。
并且确定是第一次malloc的的太小,因为只要调大第一次malloc的大小 在realloc就没有问题。
这个大小有明确的值吗?
大家都说要求贴代码,但是只能贴报错的那部分,整个代码有2k行左右
typedef struct {
char name[LEN_NAME_MAX+1];
int act_start;/*action数组的起始*/
int act_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;
} |
|