C语言中for语句自动结束循环?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
int num;
    char name[10], name2[10]; 
    int o, s, n, m, w, i, j, id, id2, same=0, *a, *a2;
    num = EMPNUM();
    EMP();
    printf("请输入将修改的职工的人数:"); 
    scanf("%d", &o);
    system("cls");
    for(i=0; i<o; i++){
        do{
            printf("您将输入该职工的(1 id,2 姓名):"); 
            scanf("%d", &s);
        }while(s<1 || s>2);
        system("cls");
        if(s == 1){
            printf("请输入该职工的id:");
            scanf("%d", &id);
            printf("职工号 姓名 性别代码 部门编号 基本工资 津贴 个税 其他扣款\n");
            for(m=0; m<num; m++){
            //    printf("%d\n", num);
            //    printf("%d\n", m);
                if(id == Emp[m].id){
                    printf("%-5d%-s    %-3d  %3d     %-5d %-5d %-5d %-5d\n", Emp[m].id, Emp[m].name, Emp[m].sex, Emp[m].depart, Emp[m].mon, Emp[m].add, Emp[m].per, Emp[m].ele);
                    *a = m;
                    a++;
                    same++;
                }    //num数值正常, m只会取到Emp[m].id取得到数为止
            }        //且不再往下走
            while(same > 1){
                printf("请输入该职工姓名:");
                scanf("%s", name2);
                for(; !eof(*a); a--){
                    if(strcmp(name2, Emp[*a].name) == 0){
                        m = *a;
                        printf("更改职工为:\n");
                        printf("职工号 姓名 性别代码 部门编号 基本工资 津贴 个税 其他扣款\n");
                        printf("%-5d%-s    %-3d  %3d     %-5d %-5d %-5d %-5d\n", Emp[m].id, Emp[m].name, Emp[m].sex, Emp[m].depart, Emp[m].mon, Emp[m].add, Emp[m].per, Emp[m].ele);
                        break;
                    }
                }
            }

运行结果及报错内容

num数值正常, m只会取到Emp[m].id取得到数为止。
即,当id=10时,m只循环十次,num却是100;当id=100,m循环一百次。
程序也不会继续往下走,只会停在Emp[]的输出上,强制退出。

我的解答思路和尝试过的方法

不清楚为什么会这样,希望各位帮帮忙

我想要达到的结果

已通过debug解决,是野指针的问题。

    int *a = (int *)malloc(10*sizeof(int));
    int *a2 = (int *)malloc(10*sizeof(int));

num = EMPNUM();
EMP();
调用的这两个函数贴出来分析一下