如何修复,当我编写main函数,并调用set方法时,显示未处理的异常。并显示无法读取内存的变量。
答案 0 :(得分:3)
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++ 中手动处理所有这些。
答案 1 :(得分:1)
正如另一个答案所述,数组的每个元素都是一个指针,需要对其进行初始化。既然你问了,我将展示如何初始化每个成员,但是,我会先声明这在现代 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];