student r;
student *p;
r[1].set_student(); ====>为什么是r[1] ?
另外,如果用realloc的话,p事先要用malloc申请
你的程序中p指向了r,但r的位置在栈里,realloc要从堆上申请分配内存,二者不可比。所以我估计这句p=(student *)realloc(p,j*sizeof(student)是有问题的。
解决办法是一开始就让p用malloc申请动态内存,然后根据输入n,调用realloc动态调整
realloc 后应该检查一下是否为空的
另外,realloc应该接收的是malloc分析的内存地址,不能是栈上变量的内存地址
放个图啊