Ошибка сегментации объекта C ++ (ядро сброшено) Ошибка - PullRequest
1 голос
/ 31 января 2020

Я новичок в C ++, поэтому, пожалуйста, успокойтесь, у меня есть следующий класс:

class DATA
{
    private:
        char* Name;
        char* Address;
        int Id;
        void initData(int size=200)
        {
            (this->Name)=(char*)malloc(sizeof(char)*size);
            (this->Address)=(char*)malloc(sizeof(char)*size);
        }
    public:
        void readData(void)
        {
            this->initData();
            printf("Enter Name: "); scanf("%s\n",this->Name);
            printf("Enter Address: "); scanf("%s\n",this->Address);
            printf("Enter Id: "); scanf("%d\n",&(this->Name));
        }
        void printData(void)
        {
            printf("Name: %s",this->Name);
            printf("Address: %s",this->Address);
            printf("Id: %d",this->Id);
        }
};

Но когда я инициализирую объект и затем вызываю методы publi c, происходит следующее:

Enter Name: John Doe
Enter Address: 53 Olive, St.
Segmentation fault (core dumped)

Итак, если кто-нибудь может сказать мне, почему (я знаю, что такое ошибка сегментации, но не понимаю, почему это здесь).

Ответы [ 2 ]

0 голосов
/ 31 января 2020

При написании кода на C ++ не используйте char* и malloc. По крайней мере, используйте new или даже лучше используйте std::string, который также отлично работает с std::cin и std::cout. В вашем примере происходит утечка памяти, поскольку вы никогда не освобождаете имя и адрес.

Ошибка сегментации вызвана scanf("%d\n",&(this->Name)), который должен быть &(this->Id), как уже указывалось.

0 голосов
/ 31 января 2020

В методе readData

     printf("Enter Id: "); scanf("%d\n",&(this->Name));

Вы должны взять чтение Id, которое является целым числом, но вместо этого чтение в строку this->Name. Либо

scanf("%d\n",&(this->Id));

Поскольку вы используете C ++, удобнее и проще использовать cin и cout, чем C в стиле scanf и printf и сталкиваться с такими проблемами.

cin >> Id;
...