如何将对象的实例分配给为null的指针
How to assign an instance of an object to a pointer that was null?
代码:
#include <iostream>
using namespace std;
class Node {
public:
Node *next;
int value;
Node(int value) {
this->next = nullptr;
this->value = value;
}
};
class LinkedList {
private:
Node *head;
Node *tail;
public:
LinkedList() {
this->head = nullptr;
this->tail = nullptr;
}
void addToEnd(int value) {
if(head == nullptr)
this->head = new Node(value);
else
this->tail->next = new Node(value);
this->tail = this->tail->next;
}
void print() {
for(Node *n = this->head; n != nullptr; n = n->next)
cout<<n->value<<" ";
cout<<endl;
}
};
int main() {
LinkedList *list = new LinkedList();
list->addToEnd(21);
list->addToEnd(25);
list->addToEnd(56);
list->addToEnd(24);
list->print();
return 0;
}
我的问题是,当我将Node
的实例分配给this->head
时,程序会崩溃。是否有不同的方法将实例分配给最初为nullptr
的指针?
这种代码结构在Java上运行良好,我来自Java,这就是为什么我在C++的指针上有困难。
编辑
我确信我现在粘贴的代码是正确的。很抱歉
好的,我已经解决了这个问题。因此,问题不在于将对象分配给类成员,而在于访问nullptr
成员:this->tail
。
我编辑了这个方法,程序现在按照我想要的方式运行。
void addToEnd(int value) {
Node *n = new Node(value);
if(head == nullptr)
this->head = n;
else
this->tail->next = n;
this->tail = n;
}
感谢大家的帮助,这个问题现在已经解决了。:)
我不知道"它崩溃了",但以下行无效:
this->head = Node(value);
head
是一个指向-Node
的指针,但您正试图为其分配一个Node
。即使这会自动获取您在RHS上创建的临时地址(它没有),您也会有一个指向不存在很长时间的局部变量的指针。
你应该得到一个编译错误。
您必须使用new
动态创建一个新对象—以后一定要写代码来释放内存!
类似地,main
中的动态内存分配也会出现混乱,会出现不必要的内存泄漏。LinkedList list;
会做得很好。
您需要为Node
实例分配内存。最快的方法是无论你在哪里打Node(value)
,都要打new Node(value)
。然而,如果我是你,我会考虑使用shared_ptr<Node>
,而不是纯指针。
相关文章:
- 当使用通配符和null指针调用函数时,对输出的说明
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 将位数组转换为 HBITMAP 后 bmBits 的 NULL 指针
- 在访问类的树层次结构中的对象时避免使用 null 指针
- 排序时引用绑定到 'value_type' 类型的 null 指针
- NULL指针解决方案中的C 分割故障
- 取消引用会导致崩溃,即使对于非 NULL 指针也是如此,原因也是如此
- 跟进哈希表 C++,this->next = NULL 指针
- C++中的NULL指针
- 当删除NULL指针(C/C )时,可以保证SegFault
- 引用绑定到类型 'struct value_type' 的 null 指针
- 尝试在C++中使用 NULL 指针时不会发生分段错误
- if(NULL==指针)和if(指针==NULL)之间有什么区别
- 在Linux/GCC下,将NULL指针访问转换为C++异常
- NULL指针检查线程安全
- cppcheck null指针取消引用:m_buffer-否则,针对null进行检查是多余的
- strtok() - 为什么必须传递 NULL 指针才能获取字符串中的下一个标记
- Null指针异常(int Vs char)
- 用户定义类中的Null指针无效
- 不是NULL指针,而是错误的访问错误消息