この非常に単純な関数をCで書いて、ノードを単独のリンクリストに追加しました。ここに私の機能があります。 head
は、リンクされたリストの最初のノードへのポインタです。リンクリストが空の場合はNULL
となります。 data
が追加される新しいノードのデータフィールドに配置する番号です:頭の単一リンクリストにヘッドノードを追加すると、セグメンテーションフォールトエラーが発生する
Node* InsertAtHead(Node *head, int data)
{
Node newHeadNode;
newHeadNode.data = data;
newHeadNode.next = NULL;
if (head == NULL)
{
head = &newHeadNode;
}
else
{
newHeadNode.next = head;
head = &newHeadNode;
}
return head;
}
定義は以下の通りです:
struct Node
{
int data;
struct Node *next;
};
これは私のマシンではなく、私の同僚のマシン上で動作します。他のマシンでは、プログラムはセグメンテーションフォールトエラーを発生させます。私の機能に何が間違っていますか?
あなたは 'newHeadNode'にスペースを割り当てる必要はないと思いますか? – SMA
@SMAはそれ自体では起こりませんか? – RBT
オハイオ州!私はそれが私にいくつかの手掛かり@ user3121023を与えると思う。 'newHeadNode'は関数にローカルなのでスタックに割り当てられますが、関数スコープがなくなると失われます。 – RBT