微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++:将指针插入结构的双指针数组时出现分段错误

如何解决C++:将指针插入结构的双指针数组时出现分段错误

我有一个 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,NULL};
TreeNode* node2 = new TreeNode{2,2,NULL};
TreeNode* node3 = new TreeNode{3,NULL};
TreeNode* node4 = new TreeNode{4,NULL};
TreeNode* node5 = new TreeNode{5,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 关键字动态分配内存,这看起来很奇怪。此外,我无法为数组分配固定数量的内存,因为子数组可以在程序中随时更改大小。

解决方法

pygame

因此,node1->children = &node2; 包含 node1->children 的地址。

node2

这没有意义。由于 node1->children[2] = node4; 包含指向 node1->children 的指针而不是数组,因此 node2 不存在 -- 没有为其分配空间,因此无法设置其值。>

您需要一个指针数组,但没有任何地方创建任何空间来存储指针数组。

您的代码在概念上与此没有什么不同:

node1->children[2]

虽然 int a; int *b = &a; b[1] = 7; 指向 b[0],但 a 无效,因此无法赋值。如果我们想要一个指向 b[1] 的指针数组,我们需要在某个地方为一个指针腾出空间。某处必须有一个 int

您可能想要执行类似 new int*[2] 的操作来分配一个包含 5 个指针的数组到 node1->children = new TreeNode*[5]; 。然后,您可以将 TreeNodenode->children[0] 设置为指向任何您想要的位置,一旦您有地方存储指针数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。