huanghe112 发表于 2017-10-21 09:40:49

关于栈的销毁

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;
}
这样能销毁一个栈吗?我试了怎么不行

huanghe112 发表于 2017-10-21 09:44:07

我在网上查找相关的资料有的说法是://一个malloc对应一个free。而不是一个字节free一次。
        //所以你只需要free一次即可,放在for里面就错了

huanghe112 发表于 2017-10-21 09:48:40

Status DestoryStack(sqStack *sqstack){
        //一个malloc对应一个free。而不是一个字节free一次。
        //所以你只需要free一次即可,放在for里面就错了
        free(sqstack->base);
        sqstack->base = NULL;
        sqstack->top = NULL;
        return OK;
}
这样的写法可以吗

zqianglh 发表于 2017-10-27 02:00:44

s->stacksize = 0; 计数的也表示下吧

ipangpang 发表于 2018-3-30 22:34:07

设置断点debug后就会发现,程序在执行第二次free()后出现崩溃,所以不用放在循环中使用free()函数 .

ipangpang 发表于 2018-3-30 22:39:49

对于free(p)这句语句,如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。
页: [1]
查看完整版本: 关于栈的销毁