运行错误的代码。
int free_dic(struct dic* &p)
{
while (1)
{
struct dic *tp = p->next;
if (p->eng && p->chi)
{
free(p->eng);
free(p->chi);
}
free(p);
p = tp;
if (p->eng == NULL) { printf("success\n"); break; }
}
return 0;
}
在这里插入代码片
这样,free p->eng然后free p->chi
会导致报错
显示为:
出现缓存区结束,再次访问的错误
----------------------------------------------------------------------------------------------
运行没问题的代码。
int free_dic(struct dic* &p)
{
while (1)
{
struct dic *tp = p->next;
if (p->eng && p->chi)
{
free(p);
}
p = tp;
if (p->eng == NULL) { printf("success\n"); break; }
}
return 0;
}
在这里插入代码片
这样则不会出错。
总结:我认为free(p->eng)的时候相当于free( p ),再次free(p->chi)出现缓存区结束,再次访问的错误。