【发布时间】:2021-02-27 10:39:40
【问题描述】:
我有一个具有以下定义的 TreeNode 类,其中包含一个指向 TreeNode 指针数组的双指针:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
typedef struct TreeNode {
int key;
int val;
bool flag;
int num_children;
TreeNode **children;
} TreeNode;
在以下代码中:
TreeNode* node1 = new TreeNode{1, 1, true, 0, NULL};
TreeNode* node2 = new TreeNode{2, 2, true, 0, NULL};
TreeNode* node3 = new TreeNode{3, 2, true, 0, NULL};
TreeNode* node4 = new TreeNode{4, 2, true, 0, NULL};
TreeNode* node5 = new TreeNode{5, 2, true, 0, NULL};
// Assign node2 to be the child of node1
node1->children = &node2;
cout << "Assigned node1->children = &node2;" << endl;
// Assign node3 to be the second child of node1
node1->children[1] = node3;
cout << "Assigned node1->children[1] = node3;" << endl;
node1->children[2] = node4;
cout << "Assigned node1->children[2] = node4;" << endl;
node1->children[3] = node5;
cout << "Assigned node1->children[3] = node3;" << endl;
以下代码行出现分段错误:
node1->children[2] = node4;
考虑到我使用 new 关键字动态分配内存,这似乎很奇怪。此外,我无法为数组分配固定数量的内存,因为子数组可以在程序中随时更改大小。
【问题讨论】:
-
你是
children of array can change size at any moment,听起来你需要像vector这样的动态数组,而不是静态数组。可能是std::vector<std::vector<TreeNode> > children。
标签: c++ memory memory-management