C++ 如何将对象的实例分配给空指针?

C++ 如何将对象的实例分配给空指针?,c++,class,object,pointers,null,C++,Class,Object,Pointers,Null,代码: 谢谢大家的帮助,这个问题现在已经解决了 我不知道它会崩溃,但下面这行是无效的: void addToEnd(int value) { Node *n = new Node(value); if(head == nullptr) this->head = n; else this->tail->next = n; this->tail = n; } head是指向节点的指针,但您正在尝试为其分配节点。

代码:


谢谢大家的帮助,这个问题现在已经解决了

我不知道它会崩溃,但下面这行是无效的:

void addToEnd(int value) {
    Node *n = new Node(value);
    if(head == nullptr)
        this->head = n;
    else
        this->tail->next = n;
    this->tail = n;
}
head是指向节点的指针,但您正在尝试为其分配节点。即使这会自动获取您在RHS上创建的临时变量的地址,但它不会,您也会有一个指向不存在很长时间的局部变量的指针

你应该得到一个编译错误

您必须使用new动态创建一个新对象——请确保稍后编写代码来释放内存


同样,在main中,您也会弄乱动态内存分配,从而导致不必要的内存泄漏。链接列表;这样就可以了。

您需要为节点实例分配内存。最快的方法是在任何调用Nodevalue的地方调用newnodeValue。但是,如果我是你,我会考虑使用SysDypPTR而不是普通指针。

你试图把一个节点对象分配给一个指向节点的指针:这个->Head=NoDeValuy;这甚至不应该编译。它甚至可以编译吗?例如this->head=Nodevalue;当head是一个指针时…崩溃是指你得到一个编译器错误吗?是的,它编译并执行EXE文件,程序在this->head=new Nodevalue上崩溃;行。@KaNa0011:但该行不存在。谢谢!我现在明白了。所以,我必须给这个->头分配一个节点指针。使用*new Nodevalue赋值是不可能的,我只是猜测:p我正在考虑使用malloc函数。如果我使用malloc而不是new,程序的行为会类似吗?顺便说一句,对象是引用,对吗?就像在Java中一样,您将分配新的Nodevalue。不知道你当时为什么要去引用它!不要仅仅因为新语法错误就求助于malloc。不,对象就是对象,引用就是引用。完全停止思考Java。你使用的是哪一本C++书?好的,我尝试了新的NoDEValk代码。它仍然崩溃。我会记住对象和引用的区别以及C++和java的区别:我也不使用任何书籍。只需用我的C++知识将java翻译成C++,@ KANA011:然后花一些时间和调试器一起!甚至是纸。跟踪程序的步骤。检查值。合理化。此外,你可能要考虑STD::UnQuyJPTR。来自Java的背景,您会很欣赏智能指针,它们会自动清理。
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);