c语言结构体中malloc和memcpy遇到的问题

问题遇到的现象和发生背景

c语言结构体中使用malloc和memcpy

遇到的现象和发生背景,请写出第一个错误信息

结构体是

typedef struct Stack
{
    STDataType* a;
    int top;
    int capacity;
}ST;
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
void StackCopy(ST* ppath,ST* pcopy)
{
    pcopy->a = (STDataType*)malloc(sizeof(STDataType*)*ppath->capacity);
    memcpy(pcopy->a,ppath->a,sizeof(STDataType)*ppath->top);
    pcopy->top=ppath->top;
    pcopy->capacity=ppath->capacity;
}
运行结果及详细报错内容

为什么malloc的sizeof后面要用STDataType而不是STDataType
还有memcpy的sizeof后面为什么要
ppath->top

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

1.在问为什么之前,你先确定这段代码是对的,不是错的
2.你就放这么点代码,没一句注释,鬼知道top是干什么的,capacity又是干什么的

malloc(sizeof(返回的指针将指向的类型)*元素个数),你现在的a指向类型是STDataType。所以不是STDataType * 而是STDataType,你这里写错了吧。
memcpy是拷贝ppath->top个元素个数过去,没拷贝完。