注册 登录
编程论坛 C++教室

大家帮我看一下,没错没警告,运行出错!

icanfeelyou 发布于 2013-11-19 20:19, 513 次点击
#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
    int age;
    char *name;
public:
    static int count;
    Student();
    Student(int m,char *n);
    ~Student();
    void Print()const;
};
int Student::count=0;
Student::Student()
{
    age=0;
    name="NULL";
}
Student::Student(int m,char *n)
{
    age=m;
    name=new char[strlen(n)+1];
    strcpy(name,n);
    count++;
}
Student::~Student()
{
    delete []name;
    count--;
}
void Student::Print()const
{
    if(name==NULL)
    {
        cout<<"name=Noname";
        cout<<"age="<<age<<endl;
    }
    else
        cout<<"name="<<name<<","<<"age="<<age<<endl;
}
int main()
{
    cout<<"count="<<Student::count<<endl;
    Student s1, *p=new Student(23,"zhanghong");
    s1.Print();
    p->Print();
    delete p;
    s1.Print();
    Student stu[4];
    cout<<"count="<<Student::count<<endl;
    return 0;
}
9 回复
#2
yuccn2013-11-19 20:38
Student::Student()
 {
     age=0;
     name="NULL";
 }

这个name 指向就是一个栈内存了,
在pirng的时候就违规啦

改成name = NULL把
#3
icanfeelyou2013-11-19 21:09
回复 2楼 yuccn
改成NULL直接运行不出结果,我感觉我函数这些的定义也没错啊
#4
xiaodu0002013-11-19 23:38
楼主的程序太高深了,我等小弟实在看不懂,还没学指针什么的呢!!
#5
maanbang2013-11-20 00:38
回复 楼主 icanfeelyou
改为
Student::Student()
{
     age=0;
     name = new char[5];
     std::strcpy(name,"NULL");
}

这样就可以了。
#6
icanfeelyou2013-11-20 10:26
回复 5楼 maanbang
谢谢你啦,能留个QQ吗
#7
icanfeelyou2013-11-20 10:28
回复 4楼 xiaodu000
我原来自学的C语言,现在才学C++,C++学习的时间没几天
#8
peach54602013-11-20 10:36
以下是引用icanfeelyou在2013-11-20 10:28:07的发言:

我原来自学的C语言,现在才学C++,C++学习的时间没几天


出了问题不要找客观原因...
你找一些客观原因搪塞一下我们...我无所谓啊,又不是我学习...但是对你提高没好处...
#9
icanfeelyou2013-11-20 10:53
回复 8楼 peach5460
就是因为学习得还不够,有时候不够细致,我没有晒唐你们的意思,别误会,我就是请大家帮帮忙,相互学习
#10
peach54602013-11-20 11:30
以下是引用icanfeelyou在2013-11-20 10:53:10的发言:

就是因为学习得还不够,有时候不够细致,我没有晒唐你们的意思,别误会,我就是请大家帮帮忙,相互学习

我也只是善意的提示你一下,别忙着给自己找借口,找理由
不要觉得自己没学几天,错了就应该的...
1