使用VS2019 运行代码不报错,但是程序异常

使用VS2019 运行代码不报错,但是程序异常

#pragma once
#include
using namespace std;

// 创建一个二叉树模板 链式
typedef struct BiTree
{
    char data;
    BiTree* lchild;
    BiTree* rchild;
}BiTree;
// 先序创建二叉树 ‘#’表示空的
void CreateBiTree(BiTree *T)
{
    char ch;
    cout << "请输入内容\n";
    cin>>ch;
    if (ch == '#') T = nullptr;
    else
    {
        if (!(T = (BiTree*)malloc(sizeof(BiTree)))) exit(0); 
        else
            T->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}
const int Maxsize = 20;
//创建一个栈结构 顺序表
typedef struct
{
    char* top;
    char* base;
}SqStack;

//初始化栈
int InitStack(SqStack &S)
{
    S.base = new char;
    if (!S.base) exit(0);
    S.top = S.base;
    return 1;
}
//入栈
void Push(SqStack& S,BiTree e)
{
    if (S.top - S.base == Maxsize) cout << "栈满\n";
    *S.top = e.data;
    S.top++;
}
//出栈
void Pop(SqStack& S,BiTree e)
{
    if (S.top == S.base) cout << "栈空\n";
    --S.top;
    *S.top = e.data;
}
//判断栈空
int StackEmpty(SqStack S)
{
    if (S.top == S.base) return 0;
    else
        return 1;
}

//中序遍历二叉树并输出
void InOrderTraverse(BiTree* T)
{
    BiTree* p = T;
    SqStack s;
    InitStack(s);
    BiTree* q = T;
    q = T;
    while (p != nullptr || StackEmpty(s) != 0)
    {
        if (p != nullptr)
        {
            Push(s, *p);
            p = p->lchild;
        }
        else
        {
            Pop(s, *q);
            cout << q->data << endl;
            p = q->rchild;
        }
    }
}

img

img

我的解答思路和尝试过的方法 :更换指针指向,我猜测就是指针问题,但是我没有用delete,所以指向一个地方应该不会错
我想要达到的结果:能够存入元素并显示