C语言单链表我没看出啥问题


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Map {
    char name [30];
    char number [10];
    int  age ;
    struct Map *next;
};
struct Map *popp(){
    struct Map *heard = NULL;
    struct Map *zen , *op;
    zen = op =(struct Map *)malloc(sizeof(struct Map));
    printf("请输入名称,学号,年龄(年龄为0时结束)\n");
    scanf("%s%s%d",zen->name,zen->number,zen->age);
    zen->next = NULL;
    while (zen->age!=0){
        if(!heard){
            heard = zen ;
        }else{
            op->next = zen;
            op = zen;
        }
        zen = (struct Map *)malloc(sizeof(struct Map));
        printf("请输入名称,学号,年龄(年龄为0时结束)\n");
        scanf("%s%s%d",zen->name,zen->number,zen->age);
        zen->next =     NULL;
    }
    free(zen);
    return heard;
}
int main(){
    struct Map *header = popp();
    return 0;
}

我看不出啥问题啊为什么跑不起来

第16行 27行,输入scanf()里,年龄的变量前漏了 ’&‘ 符:

scanf("%s%s%d", zen->name, zen->number, &zen->age);