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

Posted

技术标签:

【中文标题】如何修复抛出的未处理异常【英文标题】:How to fix Unhandled exception thrown 【发布时间】:2021-07-30 23:56:28 【问题描述】:

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

【问题讨论】:

为了将来参考,请将代码发布为文本,而不是图像。 还请注意,您正在索引数组的末尾。 【参考方案1】:
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&lt;&gt; 这样的成熟的STL 结构。无需在 C++ 中手动处理所有这些。

【讨论】:

是否可以使用指针,如果我仍然想使用指针,如何解决?谢谢 @JasonShen,您需要用 new 初始化数组的每个成员。这在现代 c++ 中一般不推荐 已编辑以添加带有指针的解决方案,但是是的,不鼓励这样做,太麻烦且容易出错。【参考方案2】:

正如其他答案所述,数组的每个元素都是一个指针,需要对其进行初始化。既然你问了,我将展示如何初始化每个成员,但是,我会先声明在现代 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];

【讨论】:

以上是关于如何修复抛出的未处理异常的主要内容,如果未能解决你的问题,请参考以下文章

XmlDocument.Save 从 GC 线程抛出的未处理异常

如何修复 Puppeteer 抛出的“节点不可见或不是 HTMLElement”错误?

如何修复可能的未处理承诺拒绝(id:0)?以及如何修复无法读取未定义的属性“导航”?

如何修复 redux/redux thunk 抛出的“Uncaught TypeError: callback is not a function”?

如何修复 io.ktor.server.engine.CommandLineKt 在 gradle/kotlin/netty 项目中抛出的“既未指定端口也未指定 sslPort”?

如何修复 Flutter 中的“解除绑定时抛出异常,java.lang.IllegalArgumentException:服务未注册:lp@9f7d4ca”异常? [复制]