为何这么完美的代码运行后会出错

#include<bits/stdc++.h>
using namespace std;
class Student{
private:
    char*name;
    int No;
    int Grade;
public:
    Student(char*name,int No,int Grade){
        this->name=name;
        this->No=No;
        this->Grade=Grade;
    }

    void showstu(){
        cout<<name<<"\t"<<No<<"\t"<<Grade<<endl;
    }

    Student(){
    name=NULL;
    No=NULL;
    Grade=NULL;         
    }

    void fuzhi(char*name,int No,int Grade){
        this->name=name;
        this->No=No;
        this->Grade=Grade;
    }
};

main(){
int n;
char*name;
int No;
int Grade;
cin>>n;
Student*stu;
stu=new Student[n];

for(int i=0;i<n;i++)
{   
cout<<"name "<<"No   "<<"Grade"<<endl;
cin>>name>>No>>Grade;
stu[i].fuzhi(name,No,Grade);
}
delete [] stu;

}

首先,也是最最重要的一点: 你在第一行码里面什么都没有include, 自然跑不起来。
再来,这码简单归简单,但是内容全部残破不堪,好几处都少打了东西,所以在编译时会发生很多错误。