【发布时间】:2021-10-18 21:23:56
【问题描述】:
我正在尝试创建一个节点类。节点类有两个变量:一个 int 和一个指向另一个节点的指针。这是我的节点构造函数。我在另一个堆栈溢出中发现,为了为值分配内存,您需要包含一个“new ...”短语。
Node::Node() {
next = new Node;
}
Node::Node(int new_num) {
num = new_num;
next = new Node;
}
我正在使用一个名为 AssignArray 的方法,它接受一个整数数组并将其转换为节点的链接列表。它的一部分工作,除非我尝试在我的节点上使用 setNext 方法。 setNext 方法只是一个常规的 setter。
void Node::setNext(Node* new_next) {
next = new_next;
}
Node* Node::AssignArray(int list[], int i, int size) {
if (i == size) {
return NULL;
}
else {
Node new_node(list[i]);
i++;
new_node.setNext(new_node.AssignArray(list, i , size));
return &new_node;
}
}
到目前为止,这是我的主要功能:
int main() {
int nums1[] = {1,2,3,4,5};
int nums2[] = {1,3,5,7,9};
Node node1 = Node();
int nums1_size = sizeof(nums1)/sizeof(nums1[0]);
node1.AssignArray(nums1, 0, nums1_size);
【问题讨论】:
-
当你创建一个节点时,你的构造函数会创建另一个节点,导致创建节点的无限循环。
-
return &new_node返回一个指向本地对象的指针。当函数返回时,该对象不再存在,因此函数总是返回一个无效的指针。 -
"包含一个“新...”短语"是过时的建议。如果您需要动态创建对象,请参阅
std::make_unique。new在 C++ 中几乎没有合法用途。
标签: c++ pointers segmentation-fault