Присвоение нового объекта типу указателя указателя в cpp разрушает программу.
Код выглядит так:
#include <iostream>
using namespace std;
struct Node{
int key;
Node * nex;
};
int main(){
Node * my_node = new Node;
Node ** pp_node;
*pp_node = my_node;
return 0;
}
Я думаю, что проблема здесь заключается в следующем: pp_node
является нулевым и введя *pp_node = my_node;
Я пытаюсь разыменовать ноль, но вопрос в том, как я могу назначить my_node
на указатель, pp_node
указывает на?
pp_node
должен содержать адрес my_node
, чтобы иметь pp_node
указывать на my_node
(который сам по себе является указателем и содержит адрес).
#include <iostream>
struct Node{
int key_;
Node * nex;
};
int main(){
Node node={34, nullptr};
Node* p_my_node = &node;
Node** pp_node;
pp_node = &p_my_node;
std::cout<<(**pp_node).key_;
return 0;
}
Сейчас
p_my_node
часть памяти, значение (данные которой она содержит) является адресом node
, Так что это указывает на node
pp_node
это часть памяти, значением которой является адрес p_my_node
Так что это указывает на p_my_node
вывод кода выше 34
, как мы и ожидали.
pp_node
неинициализирован. Вы должны инициализировать это сначала.
Node** pp_node = new Node*;
*pp_node = my_node;