鱼C论坛

 找回密码
 立即注册
查看: 3900|回复: 4

关于销毁一个栈问题

[复制链接]
发表于 2013-5-14 13:22:20 | 显示全部楼层 |阅读模式

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

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

x
栈原型为:
  1. typedef struct
  2. {
  3.   int *base;
  4.   int *top;
  5.   int max_node;
  6. }Stack;
复制代码
如果我要销毁一个栈:
书上是这样的:
  1. void Deletestack(Stack *node)
  2. 87 {
  3. 88         int i, len;
  4. 89         len = node->max_node;
  5. 90         for(i = 0; i < len; ++i)
  6. 91         {
  7. 92                 free(node->base);
  8. 93                 node->base++;
  9. 94         }
  10. 95         node->base = node->top = NULL;
  11. 96         node->max_node = 0;
  12. 97 }
复制代码
运行时出错呀, 后来我改成了这样:
  1. void Deletestack(Stack *node)
  2. 80 {
  3. 81         free(node->base);       //一开始时是分配给它的,释放时这样就行了吧
  4. 82         //要把base, top赋为null
  5. 83         node->base = node->top = NULL;
  6. 84         node->max_node = 0;
  7. 85 }
复制代码
运行正确。
我在想, 书上的是
为什么要这样?那个node->base不是指向了开辟的内存的第一个位置了吗,和链表一样, 把它指向的地址释放后, 后
面连续的地址也会释放吧?
查了一下百度, 好像别人写的也是:
free(node->base);   直接销毁指向的地址就行了,根本就不用free(node->base)----> node->base++ ------>这种形式呀。。。。。
求解疑。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-14 13:58:39 | 显示全部楼层
malloc几次 就 free几次
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-14 16:04:01 | 显示全部楼层
你做的没错,明显是书上错了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-14 17:12:16 | 显示全部楼层
我只是路过打酱油的。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-15 01:06:43 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-28 09:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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