用malloc开辟空间存储结构体的指针

#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<time.h>

typedef struct student
{
    char name[21];
    int age;
}STU, * pSTU;

typedef struct linkStackNode
{
    struct linkStackNode* pNext;    //只维护指针域
}LINKSTACKNODE, * pLINKSTACKNODE;

typedef struct linkStack            //链式的栈结构体,栈顶设计在头部
{
    LINKSTACKNODE headNode;         //头节点【不是头指针】,并不存放有效数据
    int length;                     //栈的大小
}LINKSTACK, * pLINKSTACK;

//====================================================================================================

//初始化栈
pLINKSTACK initLinkStack()
{
    //头指针
    pLINKSTACK pLinkStackHead = (pLINKSTACK)malloc(sizeof(LINKSTACKNODE));
    if (NULL == pLinkStackHead)
    {
        printf("内存分配失败.\n");
        return NULL;
    }

    pLinkStackHead->headNode.pNext = NULL;
    pLinkStackHead->length = 0;
    return pLinkStackHead;
}

//====================================================================================================

int main(int argc, char* argv[])
{
    STU stu1;

    strcpy(stu1.name, "张三");
    stu1.age = 23;

    pSTU pStu = (pSTU)malloc(sizeof(pSTU));
    pStu = &stu1;
    printf("name = %s ||=====|| age = %d\n", pStu->name, pStu->age);

    pLINKSTACK pLinkStackHead = initLinkStack();

    pLINKSTACKNODE pLSN = (pLINKSTACKNODE)malloc(sizeof(LINKSTACKNODE));
    pLSN = (pLINKSTACKNODE)&stu1;

    pLSN->pNext = pLinkStackHead->headNode.pNext;
    pLinkStackHead->headNode.pNext = pLSN;

    pSTU tmp = (pSTU)pLinkStackHead->headNode.pNext;
    printf("name = %s ||=====|| age = %d\n", tmp->name, tmp->age);

    system("pause");
    return EXIT_SUCCESS;
}

为什么最后一个printf,没有打印出name的信息
图片说明

pLSN = (pLINKSTACKNODE)&stu1;
pLSN->pNext = pLinkStackHead->headNode.pNext;//stu1.name[]被修改为NULL了