为什么不能将对象设为m1?

时间:2018-12-29 08:03:53

标签: c++ coredump

我正在尝试创建类'cls'的新对象。我做了一个无参数的构造函数,据我所知应该构造一个新的对象。但是程序崩溃,并显示一条消息“ Segmentation Fault Core Dumped”。

但是,如果我取消注释第13行 d =新int; 该程序运行正常。

///////////////////////////////////////

#include <iostream>
#include <vector>

using namespace std;
class cls
{
    private:
        int *d;
    public:
        cls() {}   //no args ctor
        cls(int a)     //1 arg ctor
        {
            //d = new int;
            *d = a;
        }
};

int main()
{
    cls m{10};
    cls m1;
    cout<<"Testing if program is still fine"<<endl;
    return 0;
}

2 个答案:

答案 0 :(得分:3)

*d = a;很可能会导致崩溃,因为d没有指向任何有效的东西(尚未初始化)。

为什么d首先是指针?如果只是将其设置为简单的int,那么您还将解决问题。

答案 1 :(得分:0)

d是一个指针,但未在cls(int a)处初始化,d指向一个未知的地址,因此有时它不会崩溃,您最好像这样编码:

#include <iostream>
#include <vector>

using namespace std;
class cls
{
    private:
        int d;
    public:
        cls() {}   //no args ctor
        cls(int a)     //1 arg ctor
        {
            d = a;
        }
};

int main()
{
    cls m{10};
    cls m1;
    cout<<"Testing if program is still fine"<<endl;
    return 0;
}