为什么这里不能释放掉内存

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stack *Stack;
typedef struct stack
{
    int data;
    Stack next;
} stack;

Stack InitStack(Stack S)
{
    S = (Stack)malloc(sizeof(stack));
    S->next = NULL;
    S->data = 0;
    return S;
}
Stack Push(Stack S, int data)
{

    if  (S->next == NULL && S->data == 0) // 如果是头节点
    {
        S->data = data;
        return S;
    }
    Stack s = (Stack)malloc(sizeof(stack)); 
    s->next = S;
    s->data = data;
    return s;
}
int Pop(Stack S) 
{
    int temp = S->data;
    Stack p = S;
    S = S->next;           
    free(p);
    p = NULL;
    return temp;
}
    int a = Pop(S);
    int b = Pop(S);
    S = Push(S,Operation(a,b,c));

 

重复释放内存了。Pop的参数不是引用类型,S = S->next;这句不能让指针实参改变

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632