在声明结构时何时使用new 何时使用新< /代码>,在C++中声明结构?这些链接不使用new:
此外,此链接与我的问题类似,但没有回答分段错误的原因:在声明结构时何时使用new 何时使用新< /代码>,在C++中声明结构?这些链接不使用new:,c++,C++,此外,此链接与我的问题类似,但没有回答分段错误的原因: }每当需要为数据结构分配内存(通常在堆上)时,您都会使用new。现在关于故障:如果你只保留线路 Node *temp; // no more = new Node; here 然后,您尝试访问它所指向的内存 temp->data = data; temp->next = '\0'; 但是没有分配内存,因此您将写入碰巧存储在temp中的某个垃圾内存地址。您必须记住Node*temp只声明指向struct的指针,它不初始化它
}每当需要为数据结构分配内存(通常在堆上)时,您都会使用
new
。现在关于故障:如果你只保留线路
Node *temp; // no more = new Node; here
然后,您尝试访问它所指向的内存
temp->data = data;
temp->next = '\0';
但是没有分配内存,因此您将写入碰巧存储在temp
中的某个垃圾内存地址。您必须记住Node*temp代码>只声明指向struct的指针,它不初始化它,也不为它分配内存
在您的情况下,您可能认为节点数据代码>将改为。但是,问题是对象数据
现在很可能存储在堆栈上,并且它将在函数退出时被释放,因此最终会出现悬空指针。这就是为什么需要使用new
,因为动态分配的对象没有绑定到本地范围。“这些链接”不使用Node*
,而是使用Node
。这是一个巨大的区别,因为temp
是指向节点的指针。在读取之前,需要为其分配一个值,该值必须是适当的节点
对象的地址。通常,当编译时数量未知时,使用动态内存分配(通过新建
)。当太大而不能声明为静态
或全局变量时,也可以使用动态内存分配。
Node *temp; // no more = new Node; here
temp->data = data;
temp->next = '\0';