在VC底下编程,为什么加上析构函数就出错,不加就没有关问题

在VC底下编程,为什么加上析构函数就出错,不加就没问题?
我在代码中间加上析构函数就提示错误,但程序能正常显示结果,将析构函数注释掉就没事,检查了一下觉得自己的析构函数也没有错啊,怎么回事求大神帮忙,谢谢
代码粘贴如下:
#include<iostream>
using namespace std;
class Student
{
private:
char * m_name;
int m_age;
int m_height;
float m_grade;
public:
Student()
{
m_name="xiaohua";
m_age=18;
m_height=180;
m_grade=0;
}
    Student(char * name,int age,int height,float grade)
{
m_age=age;
m_height=height;
m_name=new char[strlen(name)+1];
strcpy(m_name,name);
m_grade=grade;
}
/*~Student()
{
delete[] m_name;
}
*/

    void  dis()
{
cout<<m_name<<" "<<m_age<<" "<<m_height<<" "<<m_grade<<" "<<endl;
}

friend void disp(Student &stud);
};

void disp(Student &stud)
{
cout<<"name age height score "<<endl;
cout<<stud.m_name<<" "<<stud.m_height<<" "<<stud.m_name<<" "<<stud.m_grade<<endl;
}

int main()
{
Student s;
s.dis();
Student s1("xiaoming",18,158,98);
s1.dis();
    disp(s1);

return 0;
}
------解决思路----------------------
Student s;调用了无参数的构造函数,m_name无内存分配,但是析构函数仍然 delete[] m_name;


m_name = NULL;
m_name = new char[strlen(name)+1];
...

// delete
if (NULL != m_name)
{
    delete [] m_name;
    m_name = NULL;
}

------解决思路----------------------
两个问题:
1. 把m_name="xiaohua"; 这一句改成
m_name=new char[8];
strcpy(m_name,”xiaohua“);

2. m_name=new char[strlen(name)+1];前面加上一句
delete m_name;
否则内存越占越多
------解决思路----------------------
Student s;
s.dis();

对于这个对象,会进入Student()析构函数,在其中,m_name="xiaohua";m_name即指向的内存不是new出来的对内存,如果你提供析构,就会对m_name进行delete,不是对内存执行delete操作是非法的
------解决思路----------------------
请参考:C++笔试题 String类的实现 三大复制控制函数:http://www.cnblogs.com/nkxyf/archive/2012/05/31/2528474.html