|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
栈原型为:
- typedef struct
- {
- int *base;
- int *top;
- int max_node;
- }Stack;
复制代码 如果我要销毁一个栈:
书上是这样的:
- void Deletestack(Stack *node)
- 87 {
- 88 int i, len;
- 89 len = node->max_node;
- 90 for(i = 0; i < len; ++i)
- 91 {
- 92 free(node->base);
- 93 node->base++;
- 94 }
- 95 node->base = node->top = NULL;
- 96 node->max_node = 0;
- 97 }
复制代码 运行时出错呀, 后来我改成了这样:
- void Deletestack(Stack *node)
- 80 {
- 81 free(node->base); //一开始时是分配给它的,释放时这样就行了吧
- 82 //要把base, top赋为null
- 83 node->base = node->top = NULL;
- 84 node->max_node = 0;
- 85 }
复制代码 运行正确。
我在想, 书上的是
为什么要这样?那个node->base不是指向了开辟的内存的第一个位置了吗,和链表一样, 把它指向的地址释放后, 后
面连续的地址也会释放吧?
查了一下百度, 好像别人写的也是:
free(node->base); 直接销毁指向的地址就行了,根本就不用free(node->base)----> node->base++ ------>这种形式呀。。。。。
求解疑。。。。。。
|
|