私は初心者(!)の演習に取り組んでいます。関数呼び出しに関するポインタの問題
私は基本的な変数を渡すのが快適で、&の可変パラメータも使用していますので、返すときに破棄されない変数に変更を加えることができます。しかし、まだポインタを学んでいます。私は基本的なミュータントバニーの演習(リンクリストの練習)に取り組んでいます。
私はクラスバニーを宣言してリンクリストを作成します。私はあなたがデータセクションとリンケージを設定するための '次の'ポインタで期待通りにそれを設定しました。
Bunny* add_node (Bunny* in_root){}
これはノードを設定し、私がしたいだけのようにそれを返します:私は機能を使用して作成したバニーのようなものを行うための関数を呼び出すとき
struct Bunny {
string name;
int age;
// more variables here
Bunny* next;
};
すべてが素晴らしい作品。私はバニーの老化のようなBunnyクラスを修正する関数を呼び出すようなことも行うことができます。
void advanceAge (Bunny* in_root){}
は、私は頭を渡し、その後、私はと呼ばれる機能でウサギを変更することができ、それがメインに戻っても、それが修正されたままになります。たとえば、私は以下を使用することができます:
in_root->age ++;
呼び出された関数では、私は 'main'に戻っても変更されます。基本的に私は任意の呼び出された関数で - >を使用することができ、永久に変更を行います。私はポインタが逆参照されるので(?) - >しかし、まだ私の頭の周りを取得していると思う...
これまでのところとても良い。
問題を解決するには、関数を呼び出してリストを削除する必要があります。 (核オプション...ウサギはもうありません)
呼び出された関数内のすべてのノードを削除できますが、 'main'内のBunnyは変更されません。たとえば、...これはノードを永久に削除しません。
void DeathCheck(Bunny* in_root){
Bunny* prev_ptr;
prev_ptr = in_root;
if (prev_ptr == NULL){
cout << "No list to check age." << endl; return;
} else {
prev_ptr = NULL; // <- what could I code to have this stick? return;}
// rest of DeathCheck
呼び出された関数でノードをNULLに設定して固執する方法があるのではないかと思いますか?
詳細を入力する必要があります。どのようにadd_node()が動作するのか。そして、どこで正確に、どのように、ウサギのリスト全体が保存されているのですか?あなたがあなたがadd_node()でやっていると思っていることをしていないかもしれないという合理的な機会があります。 –