使用指针获取类中结构中的数据

Using pointers to get to data in structs in classes

本文关键字:结构 数据 指针 获取      更新时间:2023-10-16

我正在尝试编写一个程序,该程序将使用类和树来解决迷宫。我正在尝试使用一个类来表示迷宫(将使用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)