c语言数据结构初化报错问题

请问为什么主函数中没有memset那句话,直接报段错误

struct Stack {
int *data;
int capacity;
int top;
};
void init(struct Stack *p, int capacity) {
p->capacity = capacity;
p->data = (int *)malloc(capacity * sizeof(int));
}
int push(struct Stack *p, int x) {
if (is_full(p)) {
printf("isFullSeqstack!!!\n");
return -1;
}

p->data[p->top++] = x;

return 0;

}
int main() {
struct Stack h;
memset(&h, 0, sizeof(struct Stack));//没有居然报错
init(&h, 5);
push(&h, 1);
push(&h, 2);

}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^