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

s=NULL;

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

free(s);

s = l;

已经释放的地址空间无法重新赋值