结构数组的指针初始化

时间:2017-05-18 16:17:11

标签: c++ struct

我的应用程序崩溃了。

所以我有一个像这样的结构(但实际上它还有很多东西)

struct Record
{
    float m_fSimulationTime;
    unsigned char m_szflags;
};

在我的课堂上,我宣布它是这样的:

Record *m_record[64];

然后我将其初步化:(此处崩溃发生(读取时违反访问))

void ClassXYZ::initRecord()
{
    for (int i = 0; i <= 32; i++)
        for (int j = 0; j < 9; j++)
            m_record[i][j].m_fSimulationTime = 0.0f; // here happens the crash
}

我希望你能帮助我解决我在这里失踪的问题x.x

感谢您的建议!

1 个答案:

答案 0 :(得分:5)

变量m_record是一个指针数组。在访问指针之前,需要先初始化指针。

例如:

for (int i = 0; i <= 32; i++)
{
    m_record[i] = new Record[9];  // Make the pointer actually point somewhere
    for (int j = 0; j < 9; j++)
        m_record[i][j].m_fSimulationTime = 0.0f;

}

如果在编译时修复了大小9,更好的解决方案是使用数组数组:

Record m_record[64][9];

在这种情况下,我宁愿建议使用std::array代替。

如果在编译时不知道任何一个数组的大小,而是在运行时输入,那么请改用std::vector