如何修复抛出的未处理异常
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<>
这样的成熟的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”异常? [复制]