Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在声明结构时何时使用new 何时使用新< /代码>,在C++中声明结构?这些链接不使用new:_C++ - Fatal编程技术网

在声明结构时何时使用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';