fzquchs 发表于 2016-2-26 03:04:03

关于栈和队列这一章的销毁函数DestroyStack的一些异议

这是小甲鱼老师 栈和队列2 那一课时候的代码
DestroyStack(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;
}


由于我们初始化函数是:
initStack(sqStack *s)
{
        s->base = (ElemType *)malloc( STACK_INIT_SIZE * sizeof(ElemType) );
        if( !s->base )
                exit(0);

        s->top = s->base;   // 最开始,栈顶就是栈底
        s->stackSize = STACK_INIT_SIZE;
}

已经申请的内存是一整块的,这里我觉得释放的时候只要调用free( s->base )即可,系统会自动将这一块申请的内存回收

//更正后的函数,这里我调试过了,的确把之前申请的内存都释放了,而调用小甲鱼老师的销毁函数会产生异常,不知道其他鱼油有没有注意到这个问题!!!
Status DestroyStack(sqStack *s)
{
        //初始化的时候是一整块申请的,这里只要调用free释放就可以了
        if( s == NULL )
                return ERROR;
       
        free(s->base);
       
        s->base = s->top = NULL;
        s->stackSize = 0;

        return OK;
}

页: [1]
查看完整版本: 关于栈和队列这一章的销毁函数DestroyStack的一些异议