2017-12-30 41 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;を入力して、私は間接参照しようとしている、ヌルが、質問はどのように私はpp_nodeは、ポインタにmy_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; 
関連する問題