私は、第1の原則に基づいてC++で順序付けされていないリンクリストを実装しています。私の(部分的に完全な今のところ)実装は次のとおりです。私のC++リンクリストインプリメンテーションでノード参照をデレファレンスすると、予期しない結果が発生する
#include <iostream>
class Node {
int m_data;
Node *m_next;
public:
Node(int data)
{
m_data = data;
m_next = nullptr;
}
int getData() { return m_data; }
void setData(int data) { m_data = data; }
Node* getNext() { return m_next; }
void setNext(Node *next) { m_next = next; }
};
class UnorderedList {
public:
Node *m_head;
public:
UnorderedList()
{
m_head = nullptr;
}
bool isEmpty() { return m_head == nullptr; }
void appendToHead(int data)
{
Node temp = Node(data);
temp.setNext(m_head);
m_head = &temp;
}
void remove(int data);
bool search(int data);
};
int main()
{
UnorderedList list1;
list1.appendToHead(32);
list1.appendToHead(47);
list1.appendToHead(90);
std::cout << list1.m_head->getData() << '\n';
std::cout << list1.m_head->getNext()->getData() << '\n';
return 0;
}
私は正しく「90」として、リストの先頭を印刷することができていますが、次の行(すなわちgetNextを() - >のgetData())が印刷されます大きな乱数(281314120)とみなされます。これの理由は何ですか?
*自動保存期間*でオブジェクトのアドレスを保存しないでください。あなたは 'UnorderedList :: appendToHead'メソッドでそれを行い、未定義の振る舞いを呼び起こしました – WhiZTiM