如何修复抛出的未处理异常

时间:2021-07-30 23:56:28

标签: c++ visual-c++

enter image description here

enter image description here

如何修复,当我编写main函数,并调用set方法时,显示未处理的异常。并显示无法读取内存的变量。

2 个答案:

答案 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];
相关问题