0
私はすでに問題を解決することができましたが、問題が何かを正確に理解することができません。私のコードは、前にいた:ポインタについて何か分かりません
BinaryTree removePrivate(int x, BinaryTree *node)
{
if ((*node).m_key < x)
*(*node).m_right = removePrivate(x, (*node).m_right);
else if ((*node).m_key > x)
*(*node).m_left = removePrivate(x, (*node).m_left);
else
node= NULL ;
return *node;
}
それがうまくコンパイルが、それが呼び出されたときに物事が地獄に行きます。 return *ノードでのアクセス違反。
私はそれを変更しました:追加されている[*] = *、[] = *
BinaryTree [*]removePrivate(int x, BinaryTree *node)
{
if ((*node).m_key < x)
[ ](*node).m_right = removePrivate(x, (*node).m_right);
else if ((*node).m_key > x)
[ ](*node).m_left = removePrivate(x, (*node).m_left);
else
node= NULL ;
return [ ]node;
}
を削除されている今、すべてはうまく動作しますが、私は本当に100%を確認していない
なぜこれが良いですか。
:シンプルな形では
。 –
あなたの古いコードでは、 'NULL'のときに' node'を使ったときと同様にヌルポインタの逆参照は、何も逆参照できないので未定義の動作をします。 –
可能であれば '(* node).m_right'の代わりに' node-> m_right'を使うようにしてください。それはもっと読みやすくなります(なぜ?)(http://stackoverflow.com/questions/4263796/c-pointer-dereference-operator-対)。 この投稿にもあなたのスペルを修正してください。 –