gpt4 book ai didi

c++ - 声明结构时何时使用 new

转载 作者:行者123 更新时间:2023-11-30 01:46:07 24 4
gpt4 key购买 nike

在 C++ 中什么时候使用 new 声明结构?这些链接不使用 new:http://www.cplusplus.com/doc/tutorial/structures/ http://www.tutorialspoint.com/cplusplus/cpp_data_structures.htm

此外,此链接与我的问题类似,但未回答段错误的原因: when to use new in C++?

struct Node {
int data;
struct Node *next;
}

//Add node to end of singly linked list
Node* Insert(Node *head,int data)
{
//create node
Node *temp = new Node; // *why not: Node *temp; :Causes segfault*
temp->data = data;
temp->next = '\0';
//check for empty linked list
if(head == '\0') {
head = temp;
}
//add to end
else {
Node *curr = head;
while(curr->next != '\0') {
curr = curr->next;
}
curr->next = temp;
}
return head;

最佳答案

只要您需要为您的数据结构分配内存(通常在堆上),您就可以使用new。现在关于段错误:如果你只保留行

Node *temp; // no more = new Node; here

然后你尝试访问它指向的内存

temp->data = data;
temp->next = '\0';

但是没有分配内存,因此您将写入一些恰好存储在 temp 中的垃圾内存地址。您必须记住,Node* temp; 只是声明指向结构的指针,它不会对其进行初始化,也不会为其分配内存

在您的情况下,您可能认为 Node data; 会代替。然而,这样做的问题是对象 data 现在很可能存储在堆栈中,并且将在函数退出时释放,因此您最终会得到悬空指针。这就是您需要使用 new 的原因,因为动态分配的对象不受本地范围的限制。

关于c++ - 声明结构时何时使用 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33611712/

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