关于栈的销毁
Status DestoryStack(sqStack *s){
int i, len;
len = s->stacksize;
for (i = 0; i < len; i++)
{
free(s->base);
s->base++;
}
s->base = s->top = NULL;
s->stacksize = 0;
return OK;
}
这样能销毁一个栈吗?我试了怎么不行 我在网上查找相关的资料有的说法是://一个malloc对应一个free。而不是一个字节free一次。
//所以你只需要free一次即可,放在for里面就错了 Status DestoryStack(sqStack *sqstack){
//一个malloc对应一个free。而不是一个字节free一次。
//所以你只需要free一次即可,放在for里面就错了
free(sqstack->base);
sqstack->base = NULL;
sqstack->top = NULL;
return OK;
}
这样的写法可以吗 s->stacksize = 0; 计数的也表示下吧 设置断点debug后就会发现,程序在执行第二次free()后出现崩溃,所以不用放在循环中使用free()函数 . 对于free(p)这句语句,如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。
页:
[1]