2017-12-30 57 views
0

새 개체를 cpp의 포인터 포인터 유형에 할당하면 프로그램이 손상됩니다. 코드는 다음과 같습니다새 개체를 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가 null *pp_node = my_node;을 입력하여 내가 널 역 참조하려고하지만 문제는 내가 포인터에 my_node을 할당 할 수있는 방법이며, pp_node이다 가리키고 있니?

+0

'Node ** pp_node = & my_node; –

답변

4

pp_node는 (자체가 포인터 어드레스를 보유 함)에 my_nodepp_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이다

에서 지점에 따라서 포인트.

0

pp_node은 초기화되지 않습니다. 먼저 초기화해야합니다.

Node** pp_node = new Node*; 
*pp_node = my_node;