想问一下这个为什么会分配内存失败呢?

想问一下这里为什么用new给p申请内存会失败呢?我的思路就是想定义一个指针数组,数组中存放的是nodelist类型的结构体指针,然后利用层序结构和结点的度构建好相对应的二叉树后,再将t的指向等于p[0]的指向,那么二叉树建立完毕,再释放p数组;但是我运行的时候,系统根本就没有给数组p分配内存,所以一直报内存冲突

#include<stdio.h>
#include<stdlib.h>
#define maxsize 20
typedef struct node
{
    int key;
    struct node* lchild, * rbro;
}node,*nodelist;//孩子兄弟表示法来构建森林

typedef struct
{
    int key, du;
}dnode;
typedef struct
{
    dnode data[maxsize];
    int num;
}list;//定义一种结构体,知道其层次序列和对应的结点的度

void build_level(nodelist& t, list temp)//利用树的层次序列和相关结点的度来构建对应的二叉树
{
    nodelist* p = new nodelist[maxsize];
    int i = 0, j = 0, k = 0;
    for (int i = 0; i < temp.num; i++)
    {
        p[i]->key = temp.data[i].key;
        p[i]->lchild = p[i]->rbro = NULL;   //初始化
    }

    for (int i = 0; i < temp.num; i++)
    {
        if (temp.data[i].du != 0)
        {
            k++;
            p[i]->lchild = p[k];
            for (j = 1; j < temp.data[i].du; j++)
            {
                k++;
                p[k - 1]->rbro = p[k];
            }
        }
    }
    t = p[0];//t也为nodelist的结构体指针,其指向根结点的结构体,而p[0]中存放的即是指向根结点的nodelist结构体指针
    delete[]p;
}