gpt4 book ai didi

c++ - 通用链表指针访问

转载 作者:行者123 更新时间:2023-11-28 03:46:06 24 4
gpt4 key购买 nike

我正在使用模板在 C++ 中编写通用链表,并且在访问节点值时遇到段错误。

为了简化测试用例,我实现了一个固定大小、两个节点的链表。

我有两个问题:

1a) 为什么 aList.headNodePtr->prevNodePtr 没有设置为 NULL?

1b) 为什么 aList.tailNodePtr->nextNodePtr 没有设置为 NULL?

我在 LinkedList 构造函数中将这两个值都设置为 NULL,但 main 中的输出显示:

head prevAddress: 0x89485ed18949ed31
tail nextAddress: 0x7fffe8849679

2) 为什么 main() 中的以下行会导致段错误?

aList.headNodePtr->nodeValue = 1;

完整代码如下:

#include <iostream>
using namespace std;

template <class T>
class Node {
public:
Node<T>* prevNodePtr;
Node<T>* nextNodePtr;
T nodeValue;
};

template <typename T>
class LinkedList {
public:
Node<T>* headNodePtr;
Node<T>* tailNodePtr;

LinkedList() {
Node<T>* headNodePtr = new Node<T>;
Node<T>* tailNodePtr = new Node<T>;

headNodePtr->prevNodePtr = NULL;
headNodePtr->nextNodePtr = tailNodePtr;
tailNodePtr->prevNodePtr = headNodePtr;
tailNodePtr->nextNodePtr = NULL;
}

~LinkedList() {
headNodePtr = NULL;
tailNodePtr = NULL;
delete headNodePtr;
delete tailNodePtr;
}
};

int main()
{
LinkedList<int> aList;
cout << "head Value: " << aList.headNodePtr->nodeValue << endl;
cout << "head prevAddress: " << aList.headNodePtr->prevNodePtr << endl;
cout << "head nextAddress: " << aList.headNodePtr->nextNodePtr << endl;
cout << "tail Value: " << aList.tailNodePtr->nodeValue << endl;
cout << "tail prevAddress: " << aList.tailNodePtr->prevNodePtr << endl;
cout << "tail nextAddress: " << aList.tailNodePtr->nextNodePtr << endl;

aList.headNodePtr->nodeValue = 1;
}

最佳答案

你实际上并没有设置成员,你设置的是你在构造函数中声明的局部变量:

Node<T>* headNodePtr;  // <-- MEMBERS
Node<T>* tailNodePtr;

LinkedList() {
Node<T>* headNodePtr = new Node<T>; // <-- LOCALS
Node<T>* tailNodePtr = new Node<T>;

试试这个:

Node<T>* headNodePtr;  // <-- MEMBERS
Node<T>* tailNodePtr;

LinkedList() {
headNodePtr = new Node<T>; // <-- MEMBER ACCESS
tailNodePtr = new Node<T>;

关于c++ - 通用链表指针访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com