鱼C论坛

 找回密码
 立即注册
查看: 3382|回复: 5

关于栈的销毁

[复制链接]
发表于 2017-10-21 09:40:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
}
这样能销毁一个栈吗?我试了怎么不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-21 09:44:07 | 显示全部楼层
我在网上查找相关的资料有的说法是://一个malloc对应一个free。而不是一个字节free一次。
        //所以你只需要free一次即可,放在for里面就错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
这样的写法可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 02:00:44 | 显示全部楼层
s->stacksize = 0; 计数的也表示下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 22:34:07 | 显示全部楼层
设置断点debug后就会发现,程序在执行第二次free()后出现崩溃,所以不用放在循环中使用free()函数 .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 22:39:49 | 显示全部楼层
对于free(p)这句语句,如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 16:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表