我的应用程序崩溃了。
所以我有一个像这样的结构(但实际上它还有很多东西)
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
感谢您的建议!
答案 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
。