【发布时间】:2021-07-30 23:56:28
【问题描述】:
如何修复它,当我编写 main 函数并调用 set 方法时,显示未处理的异常。并显示变量无法读取内存。
【问题讨论】:
-
为了将来参考,请将代码发布为文本,而不是图像。
-
还请注意,您正在索引数组的末尾。
标签: c++ visual-c++
如何修复它,当我编写 main 函数并调用 set 方法时,显示未处理的异常。并显示变量无法读取内存。
【问题讨论】:
标签: c++ visual-c++
shipContainer* shipContainer1[6];
这不是shipContainer 对象的数组。它是一个由 6 个 指针 组成的数组,指向 shipContainer 对象,这些对象实际上存储在内存中的其他位置。
但是随后数组未初始化,并且各个条目没有指向任何地方。因此,当您尝试使用它们时,它会崩溃或表现出其他一些未定义的行为。
如果您想要一个包含 6 个 shipContainer 对象的数组,就在堆栈上,请执行以下操作:
shipContainer shipContainer1[6];
shipContainer1[0].setContainerID(100);
即1)第一行没有星号,2). 而不是-> 在随后的行。
或者,如果你想要一个指针数组,你需要先初始化它以指向一些有效的构造对象,例如
for (int i = 0; i < 6; i++)
shipContainer1[i] = new shipContainer();
请注意,这些对象也应该在稍后使用delete 语句销毁。或者只是使用智能指针。或者像std::vector<> 这样的成熟的STL 结构。无需在 C++ 中手动处理所有这些。
【讨论】:
正如其他答案所述,数组的每个元素都是一个指针,需要对其进行初始化。既然你问了,我将展示如何初始化每个成员,但是,我会先声明在现代 c++ 中不推荐这样做。
shipContainer* shipContainer1[6];
for ( size_t idx = 0; idx < 6; ++idx)
shipContainer1[idx] = new shipContainer;
shipContainer1[0]->setContainerID(100);
容器完成后,别忘了删除。
for ( size_t idx = 0; idx < 6; ++idx)
delete shipContainer1[idx];
【讨论】: