- 论坛徽章:
- 0
|
本帖最后由 herocsz 于 2012-04-06 09:31 编辑
写了个测试代码,编译通过,运行时,在最后free的时候报错:free(): invalid next size(fast): 0x09c22008。
但是把其中给结构体成员malloc的那两行注释掉,free不报错,这问题出在哪里?
全部源代码如下:
#define CALLOC_TYPEDEF(size) (void *) calloc(1, sizeof(size))
typedef struct
{
char ser_ip[16];
char *name;
size_t name_length;
unsigned char type;
void *value;
size_t value_len;
}S_SNMP_PACK, *PS_SNMP_PACK;
int main(void)
{
PS_SNMP_PACK p_ret = NULL;
p_ret = (PS_SNMP_PACK)CALLOC_TYPEDEF(sizeof(S_SNMP_PACK));
if(!p_ret)
{
printf("p_ret malloc err\n");
}
p_ret->name = (char*)CALLOC_TYPEDEF(sizeof(char)); //这行注释掉,free不出错。
p_ret->value = (char*)CALLOC_TYPEDEF(sizeof(char)); //这行注释掉,free不出错。
printf("-Addr-> ser_ip=0x%X\n name=0x%X\n name_length=0x%X\n type=0x%X\n value=0x%X\n value_len=0x%X\n\n",
&p_ret->ser_ip, &p_ret->name, &p_ret->name_length, &p_ret->type, &p_ret->value, &p_ret->value_len);
char ip[16] = "255.255.255.255";
char name[] = "snmptrap";
char val[] = "AP01&admin&06-A4-DE-B4-7F-C0&1&-60&AP02&&F8-D1-11-E4-41-94&1&-65&";
//以下把内容拷贝
memcpy(p_ret->ser_ip, ip, sizeof(ip));
p_ret->name = strdup(name);
p_ret->name_length = strlen(p_ret->name);
p_ret->type = ASN_OCTET_STR;
p_ret->value = strdup(val);
p_ret->value_len = strlen(p_ret->value);
printf("=结果内容=> ser_ip=%s\n name=%s\n name_length=%d\n type=0x%02X\n value=%s\n value_len=%d\n\n",
pSnmpack->ser_ip, pSnmpack->name, pSnmpack->name_length, pSnmpack->type, pSnmpack->value, pSnmpack->value_len);
free(p_ret);
}
|
|