ky0uma 2020-09-18 11:03 采纳率: 0%
浏览 125
已采纳

malloc函数的使用问题

typedef struct lstack{
    int data;
    struct lstack* next;
}lstack, * lstackll;       //结构体定义

void init(lstackll &s)                  //初始化
{
    s=NULL;
}

//。。。中间部分省略

void out (lstackll &s, int i, int &a)   //出栈
{
    if(s ->next == NULL)                //如果最后一个数据出栈之后是空栈
    {
        a = s ->data;
        s=NULL;                          //为什么这个部分不行,要改成free(s); lstackll s=NULL;
    }
    lstackll l = s ->next;
    a = s->data;
    free(s);
    s = l;
}

以下是全部代码

#include <iostream>
#include<stdlib.h>

using namespace std;
typedef struct lstack{
    int data;
    struct lstack* next;
}lstack, * lstackll;

void init(lstackll &s)                  //初始化
{
    s=NULL;
}
void more(lstackll &s, int e)           //入栈
{
    if(s == NULL)
    {
        s = (lstack* )malloc(sizeof(lstack));
        s ->data = e;
        s ->next = NULL;
        return;
    }
    lstackll l = s;
    s =(lstack* )malloc(sizeof(lstack));
    s ->data = e;
    s ->next = l;

}
void out (lstackll &s, int i, int &a)   //出栈
{
    if(s ->next == NULL)                //如果出栈之后是空栈
    {
        a = s ->data;
        free(s);
        lstackll s=NULL;    //需要重新声明s并初始化,方便以后使用
    }
    lstackll l = s ->next;
    a = s->data;
    free(s);
    s = l;
}
int main()
{
    lstackll s;
    init(s);
    more(s,999);                //测试用  栈底
    for (int i = 0; i < 10; i++)    //循环入栈
        more(s,i);
    for (int i = 0; i < 11; i++)    //出栈
    {
        int a = 0;
        out(s,i,a);
        cout<<a<<endl;
    }
    more(s,13);                 //判断能否继续使用
    cout<<"\n"<<s->data<<endl;

    return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-09-18 11:43
    关注

    s=NULL;

    s都指向NULL了
    你后面还
    free(s);
    肯定不行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题