使用指针获取类中结构中的数据
Using pointers to get to data in structs in classes
我正在尝试编写一个程序,该程序将使用类和树来解决迷宫。我正在尝试使用一个类来表示迷宫(将使用cin输入设计),并且该类包含一个结构作为私有成员。
此结构包含两个int(用于位置的x和y坐标)和一个包含3个空格的数组,该数组将包含指向其他结构的三个指针。
在我的类的构造函数中,我试图将数组中的所有指针设置为NULL以启动。程序编译得很好,但当我到达构造函数时,程序会给我一个分段错误。以下是一些相关代码:
const int POSSIBLE_BRANCHES = 3; //at any point the path can split in 3 ways
struct PathNode
{
int x_coord;
int y_coord;
PathList branches[POSSIBLE_BRANCHES];
};
typedef PathNode *PathList;
class Maze
{
private:
PathList initial_pos;
public:
Maze();
};
构造函数:
Maze::Maze()
{
cout << "entered constructor" << endl;
for (int i = 0; i < POSSIBLE_BRANCHES; i++)
{
initial_pos->branches[i] = NULL;
}
}
我打印出了"输入的构造函数"短语,但程序随后立即停止。我认为这是指针语法的一些愚蠢问题,但我一直无法找到问题所在。
据我所知:->运算符取消引用指向PathNode结构的指针,因此现在我们可以访问x_coord、y_coord和分支等成员。[]运算符获取分支数组的每个索引。因为它是指向PathNodes的指针数组,所以将它们设置为NULL应该没问题。我推理的缺陷在哪里?
编辑:已解决。查看标记为最佳的答案。
在使用initial_pos之前,您还没有分配它。这导致了segfault。大致如下:
Maze::Maze()
: initial_pos(new PathNode)
{
cout << "entered constructor" << endl;
for (int i = 0; i < POSSIBLE_BRANCHES; i++)
{
initial_pos->branches[i] = NULL;
}
}
应该可以解决你的问题。
您的构造函数是为新类调用的第一个对象,因此您永远不会在中分配或初始化initial_pos
,但随后会取消引用它,从而导致未定义的行为(很可能导致segfault)
相关文章:
- 如何在C++中序列化结构数据
- 正在转换结构数据的字节序
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- 在结构数据类型中更改每个字符的 ASCII 值
- C++ - 检查结构数据类型中的单词是否为回文
- 如何将结构数据成员传递到函数中
- 在std::线程中使用已分配的结构数据
- 将结构数据存储在循环缓冲区中
- 通过指针算法访问结构数据成员
- 将结构数据类型传递给 C++ 中的命名管道
- CLI/C# 将 std::vector<> 结构数据传递给 C#
- 使用来自 C 的内存地址的 Julia 读取/写入结构数据
- CPP 在读取结构数据时无限循环错误?
- 为什么C++编译器不优化对结构数据成员的读取和写入,而不是不同的局部变量?
- 使用Hazelcast替换共享内存结构数据
- 带有结构数据的 Gmock
- 结构数据D = {0}和结构数据D = {}之间是否存在任何区别
- 有没有办法将数组行为作为静态结构数据成员?
- 使用函数操作结构数据类型的值
- 有关结构数据'getting'的性能