在写一个学生信息管理系统时用到了动态数组,输入学生个数,再输入每个学生的信息,最后将所有学生排名后输出,但是运行时在我输入学生信息之后命令行提示:

我检查了指针和动态数组的使用,并没有发现指针超出malloc分配的内存的情况,请问一下为什么会出现这个问题啊?
以下是C语言代码:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[10];
int math;
int eng;
int chi;
int sum;
int rank;
};
//定义一个学生信息结构体
void input(int *p) {
scanf("%d", p);
getchar();
}
//输入学生个数
void input_info(struct student *p, int len) {
for (int i = 0; i < len; i++) {
scanf("%d %s %d %d %d", &(p[i].num), p[i].name, &(p[i].math), &(p[i].eng), &(p[i].chi));
getchar();
}
}
//输入学生信息
void sum(struct student *p, int len) {
for (int i = 0; i < len; i++) {
p[i].sum = p[i].math + p[i].eng + p[i].chi;
}
}
//将学生各科成绩相加得到总分
void swap(struct student *p1, struct student *p2) {
struct student temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void sort(struct student *p, int len) {
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (p[j+1].sum < p[j].sum) {
swap(p+j+1, p+j);
}
else if ((*(p+j+1)).sum == (*(p+j)).sum) {
if (p[j+1].num < p[j].num) {
swap(p+j+1, p+j);
}
}
}
}
}
//根据总分和学号递增排序
void rank(struct student *p, int len) {
int count = 0;
for (int i = 1; count < len-1; count++) {
p[len-count-1].rank = i;
if (p[len-count-2].sum != p[len-count-1].sum) {
i += 1;
}
}
}
//给每一位学生排名
void print(struct student *p, int len) {
for (int i = 0; i < len; i++) {
printf("%4d%10d%10s%5d%5d%5d\n", p[i].rank, p[i].num, p[i].name, p[i].math, p[i].chi, p[i].eng);
}
}
//输出结果
int main() {
int *len = (int *)malloc(sizeof(int));
input(len);
if (*len >= 10) {
printf("Please input 1-9.");
return 0;
}
struct student *info = (struct student *)malloc((*len) * sizeof(struct student));
input_info(info, *len);
sum(info, *len);
sort(info, *len);
rank(info, *len);
print(info, *len);
free(len);
free(info);
return 0;
}