森侃 2022-10-25 19:00 采纳率: 60%
浏览 13
已结题

关于数据结构释放栈的问题


#include <stdio.h>
#include <stdlib.h>
typedef struct SLinkNode
{
    int data;
    struct SLinknode* next;
    struct SLinkNode* head;
}Node,*Stack;
Stack initStack(Stack S)
{
    S->head=(Node*)malloc(sizeof(Node));
    S->head->next=NULL;
}
Stack push(Stack S,int e)
{
    Node* p=S->head->next;
    Node* s=(Stack)malloc(sizeof(Node));
    s->data=e;
    s->next=p;
    S->head->next=s;
}
int pop(Stack S)
{
    Node* p=S->head;
    Node* q=p->next;
    if(q)
    {
        int e=q->data;
        p->next=q->next;
        free(q);
        return e;
    }
}
void conversion(Stack S)
{
    initStack(S);
    int N;
    scanf("%d",&N);
    if(N<=0)
    {
        scanf("%d",&N);
    }
    while(N)
    {
        push(S,N%8);
        N=N/8;
    }
    int e;
    while(S->head->next!=NULL)
    {
        e=pop(S);
        printf("%d",e);
    }
}
int main()
{
    Stack S;
    conversion(&S);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct SLinkNode
{
    int data;
    struct SLinknode* next;
    struct SLinkNode* head;
}Node,Stack;
Stack initStack(Stack* S)
{
    S->head=(Node*)malloc(sizeof(Node));
    S->head->next=NULL;
    S->next=NULL;
}
Stack push(Stack* S,int e)
{
    Node* p=S->head->next;
    Node* s=(Node*)malloc(sizeof(Node));
    s->data=e;
    s->next=p;
    S->head->next=s;
}
int pop(Stack* S)
{
    Node* p=S->head;
    Node* q=p->next;
    if(q)
    {
        int e=q->data;
        p->next=q->next;
        free(q);
        return e;
    }
}
void conversion(Stack* S)
{
    int N;
    scanf("%d",&N);
    while(N<=0)
    {
        scanf("%d",&N);
    }
    while(N)
    {
        push(S,N%8);
        N=N/8;
    }
    int e;
    while(S->head->next!=NULL)
    {
        e=pop(S);
        printf("%d",e);
    }
}
int main()
{
    Stack S;
    initStack(&S);
    conversion(&S);
    free(S.head);
    return 0;
}


第一个是我自己写的,第二个是应该是teacher拿我的改的,想问一下我的问题在哪,为什么要改成后面这种,teacher说我要释放栈,不然内存泄漏,然后就发给了后面的这个程序。

  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-25 19:27
    关注

    free(S.head); 多了这句话, 你的应该head没有释放。 S->head 是单独在init的时候申请了,push和pop是一对malloc和free

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题
  • ¥20 基于matlab的航迹融合 航迹关联 航迹插补
  • ¥15 用Matlab实现图中的光线追迹
  • ¥15 联想笔记本开机出现系统更新界面