2番目のパラメーターを渡すとNode** fhead
セグメンテーション違反が発生するのはなぜですか?値と、次を指す次のポインタNode
がありint
ますNode
。
これが私のコードです:
void reverse(Node* head, Node** fhead) {
if (!head->next)
{
fhead = &head;
return;
}
reverse(head->next, fhead);
head->next->next = head;
head->next = 0;
}
int main()
{
Node a = {1, 0};
Node b = {2, &a};
Node c = {3, &b};
Node** fhead;
reverse(&c, fhead);
}
非常に小さいが深刻な問題が2つあります。
最初、
fhead = &head;
変更が関数の外部に表示されないように、パラメーターに値を割り当てます。
これはまったく同じように機能します
void f(int x)
{
x = 0;
}
たとえば、へのポインタを渡すときに行うのと同じようにint
、
void f(int* x)
{
*x = 0;
}
ポインタが指すオブジェクトに割り当てる必要があります。
*fhead = head;
次に、変数への有効なポインタを渡す必要があります。
Node* fhead = 0;
reverse(&c, &fhead);
(初期化は厳密には必要ありませんが、変数を初期化することをお勧めします。)
これら2つの変更により、コードは期待どおりに機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加