代码如下:
//摧毁栈
DestroyStack(sqStack *s)
{
int i;
for(i=1;i<=stacksize,i++)
{
free(s->base);//这里释放掉的是什么?(*(s->base)为int型)
s->base++;
}
s->base=s->top=NULL;
s->stacksize=0;
}
看了很多关于free的文章,大致的理解为:
1.通过malloc函数向系统申请空间后,系统会将一块大小符合要求的空间圈起来;
2.如果你free掉了这一块空间例如:free掉s->base,会将这块s->所指向的空间的边界去掉,即将这块空间还给系统;
3.此时这块空间还存在free之前的值,指向该空间的指针依旧为原来的地址,但无法通过指针的取值提取出来,即*(s->base)不合法;
根据上述理解和现实操作的冲突,我有以下问题:
1.free指针前,他的空间为int型(4字节),那么这里的s->base+1指指向下一元素即下一个int型的指针,暂时叫这个值为t,既然是这样,那么将s->base释放后,s->base++是否应该指向该指针下一字节,即想要得到t的指针,应该将s->base自加四次;但实际操作中,只需要自加一次,这与我的理解冲突,但暂时还没有找到问题所在。