Почему я не могу сделать объект m1? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь создать новый объект класса 'cls'.Я создал конструктор без аргументов, который, по моим сведениям, должен был создать новый объект.Но программа вылетает с сообщением Segmentation Fault Core Dumped.

Однако, если я раскомментирую строку, 13 d = new 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 голосов
/ 29 декабря 2018

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;
}
0 голосов
/ 29 декабря 2018

*d = a;, скорее всего, вызовет сбой, поскольку d не указывает на что-либо действительное (оно не было инициализировано).

Почему d вообще указатель?Если вы просто сделаете это простым int, вы также решите свою проблему.

...