酱子鱼1108 发表于 2019-3-28 22:50:22

栈和队列第3课:二进制转化为十进制的free内存问题

父老乡亲们,走过路过帮小生看一眼bug吧,程序就是小甲鱼数据结构和算法课上的二进制转十进制,这里我把malloc的内存free了一下,可void DestroyStack(sqStack *s)的时候出错了,百思不得其解~~~

#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10


typedef int ElemType;

typedef struct
{
        ElemType *base;
        ElemType *top;
        int stackSize;
}sqStack;

void initStack(sqStack *s)
{
        s->base = (ElemType*)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
        if(!s->base)
                exit(0);
        s->top = s->base;
        s->stackSize = STACK_INIT_SIZE;
}

void Push(sqStack *s, ElemType e)
{
        if(s->top - s->base >= s->stackSize)
        {
                s->base = (ElemType*)realloc(s->base, (s->stackSize + STACKINCREMENT)*sizeof(ElemType));
                if(!s->base)exit(0);

                s->top = s->base + s->stackSize;
                s->stackSize += STACKINCREMENT;
        }
        *(s->top) = e;
        s->top++;
}


ElemType Pop(sqStack *s)
{
        if(s->top == s->base) return NULL;
        return *--(s->top);
}

void ClearStack(sqStack *s)
{
        s->top =s->base;
}

void 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;
}

int StackLen(sqStack s)
{
        return (s.top-s.base);
}


int main()
{
        ElemType sum=0,a=1,i,len;
        char e;
        sqStack *s;
        s = (sqStack*)malloc(sizeof(sqStack));
        initStack(s);
        scanf("%c",&e);
        while(e!='#')
        {
                Push(s, (int)(e-48));
                scanf("%c",&e);
        }
        getchar();
        len = StackLen(*s);
        printf("栈的当前容量是:%d\n",len);
        for(i=0; i<len; i++)
        {
                a *= 2;
                sum += Pop(s)*a/2;
        }
        printf("%d",sum);
        DestroyStack(s);
        free(s);
        s=NULL;
        return 0;
}








酱子鱼1108 发表于 2019-3-29 13:29:00

{:10_256:}{:10_257:}{:10_257:}
页: [1]
查看完整版本: 栈和队列第3课:二进制转化为十进制的free内存问题