|
发表于 2010-7-27 03:18:31
|
显示全部楼层
void dele_list(struct write_to_mysql *dele_list_begin)
{
struct write_to_mysql *front *behind, *temp;
front = dele_list_begin->pre;
behind = dele_list_begin->next;
free(dele_list_begin);
while (front) {
temp = front->pre;
free(front);
front = temp;
}
while (behind) {
temp = behind->next;
free(behind);
behind = temp;
}
}
代码是凭技记忆写的..应该没错..一般链表都是这样删除的..
不过我没用过双端链表(这词我还是查了google才知道),所以不太清楚是不是这样写.而且我也很久没写过链表了..
根据我的猜测,你的代码之所以在旧版本的glibc能运行,应该是旧版本对double free的检查不严.你可以尝试不释放pre和next的最后一个指针看看,当然,对于双端链表,也可能是对dele_list_begin二次释放了吧? |
|