私はC++クラスの二重リンクリストを作成していますが、挿入関数に問題があります。考えられるのは、ソートされたリストに正しい位置(つまり、数字の前、数字の前)に値を挿入することです。この関数は、正しい場所に数値を挿入するという点で機能しますが、ポインタを割り当てて新しいノードを考慮しようとすると、segフォルトが発生します。特定の行は次のとおりです。C++でsegフォルトを取得する二重リンクリスト挿入関数
nodePtr->previous = newNode;
私は問題なく他のスポットでnodePtrからポインタを割り当てるために同じ構文を使用しますので、私はここに理由ワンセグ障害を理解することはできません。
ご協力いただきありがとうございます。
EDIT:nodePtrがnullptrに設定された後、前のポインタにアクセスしようとすると問題が発生したようです。 if文は手前でcaseに処理されます。 .cppファイルから
struct ListNode {
double value;
struct ListNode *next;
struct ListNode *previous;
};
ListNode *head;
:.Hから
void NumberList::insertNode(double num)
{
ListNode *newNode;
ListNode *nodePtr;
ListNode *previousNode;
newNode = new ListNode;
newNode->value = num;
if(!head)
{
head = newNode;
newNode->next = nullptr;
}
else
{
nodePtr = head;
previousNode = nullptr;
while (nodePtr != nullptr && nodePtr->value < num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
if (nodePtr != nullptr)
nodePtr->previous = previousNode;
}
if (previousNode == nullptr)
{
head = newNode;
newNode->next = nodePtr;
}
else
{
nodePtr->previous = newNode;/*This is the line that seg faults.*/
previousNode->next = newNode;
newNode->next = nodePtr;
newNode->previous = previousNode;
}
}
}
を試してみてください。 –
私はnullptrの前にnodePtr->を初期化しようとしましたが、segフォールトはまだ発生していますので削除しました。 –
他のポインタについての帽子? 'head'、' next'、 'previous'、' nodePtr'のどれか?これらはすべてnullptrに初期化する必要があります。デバッガでコードをステップ実行し、適切な値が与えられる前にどの物が使用されているかを確認します。 –