программа cra sh в доступе к элементам структуры - PullRequest
3 голосов
/ 07 мая 2020

struct a имеет int b и указатель на структуру как его элементы. И программа вылетает без печати результатов.

struct a{
    int b{5};
    a* next=new a;
    a(){
        next->b=3;
    }
    
};
int main(){
    a a1;
    cout<<a1.b<<endl;
    cout<<(*(a1.next)).b<<endl;
    return 0;
}

Я ожидал, что результат будет:

5

3

1 Ответ

2 голосов
/ 07 мая 2020
a* next=new a;

Ваша структура a имеет член с именем next, который инициализируется по умолчанию как new. Каждый экземпляр a, создаваемый вашей программой, будет иметь член класса с именем next, который инициализируется new. Вот как работают классы и инициализаторы членов класса по умолчанию.

Этот член, как я уже сказал, является другой структурой a. Который, конечно, также имеет член с именем next, который будет инициализирован new. Как и каждый экземпляр struct a, конечно.

И второй struct a также будет иметь член next, как и все a s, который будет инициализирован new . У этого третьего экземпляра a будет собственный next, который будет инициализирован new.

И так до бесконечности, пока на вашем компьютере не закончится память, создавая бесконечную цепочку struct a s.

Непонятно, каковы ваши намерения, но это отвечает на вопрос, почему ваша программа дает сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...