读取访问权限冲突, b 是 nullptr怎么解决

这是完整的代码:

#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
#pragma warning(disable:6385)
#pragma warning(disable:6386)
typedef char ElemType;
typedef struct node
{
    ElemType data;
    struct node* lchild;
    struct node* rchild;
}BTNode;
void CreateBTree(BTNode*& b, const  char* str) //创建二叉树
{
    BTNode* St[MaxSize], * p;
    p = NULL;
    int top = -1, k, j = 0; char ch;
    b = NULL;  //建立的二叉树初始时为空
    ch = str[j];
    while (ch != '\0')  //str 未扫描完时循环
    {
        switch (ch)
        {
        case'(':top++; St[top] = p; k = 1; break;  //开始处理左子树
        case')':top--; break;   //子树处理完毕
        case',':k = 2; break;  //开始处理右子树
        default:p = (BTNode*)malloc(sizeof(BTNode));
            p->data = ch; p->lchild = p->rchild = NULL;
            if (b == NULL)  //若b为空,p置为二叉树的根结点
                b = p;
            else  //已建立二叉树根节点
            {
                switch (k)
                {
                case 1:St[top]->lchild = p; break;
                case 2:St[top]->rchild = p; break;
                }
            }
        }
        j++; ch = str[j];
    }
}
void FindMinNode(BTNode* b, char &min)
{
        if (b->data < min)
            min = b->data;
    FindMinNode(b->lchild, min);   //在左子树中找最小结点值
    FindMinNode(b->rchild, min);  //在右子树中找最小结点值
}
void MinNode(BTNode* b)    //输出最小值结点
{
    if (b != NULL)
    {
        char min = b->data;
        FindMinNode(b, min);
        printf("Min = %d\n", min);
    }
}
int main()
{
    BTNode* b, * p;
    //char min;
    CreateBTree(b,"8(7(6,5(3(2,),23(21,17(,12)))");
    //FindMinNode(b, min);
    //FindMinNode(b, min);
    MinNode(b);
    return 1;
}

运行后会出现报错:

img


BTNode* b = NULL;

将b初始化为NULL

初始化了,还是报那个错误