为什么我这【链表】 内存释放不了?

程序可以运行,可以输入,可以输出,但是到了释放内存的时候就有问题了 求大神指正。

 #include <stdio.h>
 #include <stdlib.h>


typedef struct node{
    int data;
    struct node *next;
}*LPNODE;

LPNODE CreateList(int n);
void ShowList(LPNODE lphead);

int main(void)
{
    LPNODE lpHead, temp, current;
    int num;

    puts("请问您需要几个节点?");
    scanf_s("%d", &num);
    lpHead = CreateList(num);
    ShowList(lpHead);

    //释放链表
    current = lpHead;       
    while (current != NULL)
    {
        temp = current->next;
        free(current);
        current = temp;
    }

    return 0;
}

LPNODE CreateList(int n)
{
    int _data, count = 0;
    LPNODE lpHead = NULL;
    LPNODE current, prev;

    lpHead = current = prev = (LPNODE)malloc(sizeof(LPNODE));

    puts("请输入一个数字:");
    while (scanf_s("%d", &_data))
    {
        current = (LPNODE)malloc(sizeof(LPNODE));


        prev->next = current;

        current->data = _data;
        current->next = NULL;

        prev = current;

        count++;    //控制循环
        if (count < n)
            puts("请输入下一个数字");
        else
        {
            puts("输入结束!");
            break;
        }
    }
    return lpHead;
}

void ShowList(LPNODE lpHead)
{
    LPNODE p = lpHead->next;

    while (p != NULL)
    {
        printf("%d  ", p->data);
        p = p->next;
    }
}

free出错是因为你malloc的时候申请的空间不对。
lpHead = current = prev = (LPNODE)malloc(sizeof(LPNODE));以及current = (LPNODE)malloc(sizeof(LPNODE));不对
因为你sizeof(LPNODE)相当于sizeof(指针),在32位机上永远是4
你typedef的时候应该多取一个名字,假设叫LPLEN,然后应该改成(LPNODE)malloc(sizeof(LPLEN));

 #include <stdio.h>
#include <stdlib.h>


typedef struct node{
    int data;
    struct node *next;
}*LPNODE,LPLEN;

LPNODE CreateList(int n);
void ShowList(LPNODE lphead);

int main(void)
{
    LPNODE lpHead, temp, current;
    int num;

    puts("请问您需要几个节点?");
    scanf_s("%d", &num);
    lpHead = CreateList(num);
    ShowList(lpHead);

    //释放链表
    current = lpHead;
    while (current != NULL)
    {
        temp = current->next;
        free(current);
        current = temp;
    }

    return 0;
}

LPNODE CreateList(int n)
{
    int _data, count = 0;
    LPNODE lpHead = NULL;
    LPNODE current, prev;

    lpHead = current = prev = (LPNODE)malloc(sizeof(LPLEN));

    puts("请输入一个数字:");
    while (scanf_s("%d", &_data))
    {
        current = (LPNODE)malloc(sizeof(LPLEN));


        prev->next = current;

        current->data = _data;
        current->next = NULL;

        prev = current;

        count++;    //控制循环
        if (count < n)
            puts("请输入下一个数字");
        else
        {
            puts("输入结束!");
            break;
        }
    }
    return lpHead;
}

void ShowList(LPNODE lpHead)
{
    LPNODE p = lpHead->next;

    while (p != NULL)
    {
        printf("%d  ", p->data);
        p = p->next;
    }
}

printf("sizeof(LPNODE) = %d\n", sizeof(LPNODE));
printf("sizeof(node) = %d\n", sizeof(node));
sizeof(LPNODE) = 4
sizeof(node) = 8

内存大小计算错误。
malloc(sizeof(LPNODE))改为malloc(sizeof(node))

 typedef struct node{
    int data;
    struct node *next;
}*LPNODE;

犯了指针与结构体大忌。。。。