- 论坛徽章:
- 0
|
各位高手,小弟在fedora10上用gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)编译运行以下程序时,
两次调用free程序正常终止了,那位大侠帮忙解答一下啊。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _link
{
int src;
int dst;
int type;
}link;
typedef struct _node
{
int idx;
int type;
link *link_list;
}node;
int main(void)
{
link *link_p = malloc(sizeof(link));
memset(link_p, 0, sizeof(link));
link_p->src = 1;
link_p->dst = 2;
node * node_p = (node *)malloc(sizeof(node));
memset(node_p, 0, sizeof(node));
node_p->idx = 1;
node_p->link_list = link_p;
printf("node idx: %d\n", node_p->idx);
printf("link dst: %d\n", link_p->dst);
node *node2_p = malloc(sizeof(node));
memset(node2_p, 0, sizeof(node));
memcpy(node2_p, node_p, sizeof(node));
//comment 1
//free(link_p);
//link_p = NULL;
free(node2_p->link_list);
node2_p->link_list = NULL;
free(node2_p);
node2_p = NULL;
free(node_p->link_list);
node_p->link_list = NULL;
free(node_p);
node_p = NULL;
//comment 2
//free(link_p);
//link_p = NULL;
printf("free success\n");
return 0;
}
注:我只把comment 2注释掉的两句放开后,程序也是正常的。
但是只把comment 1注释的两句放开后,程序便报下面的错误:
double free or corruption 。
请问:为什么把comment 1那两句注释掉后程序就可以正常运行呢?不是应该报“double free or corruption ”这样的错误吗? |
|