如何解释控制台上显示的 C++ 错误消息?

How to interpret c++ error messages displayed on the console?

我是 C++ 的新手,我不太了解如何阅读和解释控制台上显示的 C++ 错误消息。以下是我在 OpenCV 中处理一些图像时出现的错误消息。我知道这应该是与 Mat 文件的索引和 Mat 矩阵数据结构的维度有关的错误。但是我想学习如何一点一点地阅读错误信息。

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (un
signed)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1
]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) &
 ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file e:\opencv\build\i
nclude\opencv2\core\mat.hpp, line 538

First read up on assertions.

通常它是对输入的测试或函数调用传递的错误、异常和致命的东西。如果测试通过,程序就可以运行。如果测试失败,它会以一种残酷且非常明显的方式终止,以确保错误得到修复。

标准修复是:

  1. 使用调试器确定断言哪个函数。

  2. 阅读断言函数的文档,确保您传递的数据正确,并在调用断言函数之前正确调用以配置系统。

继续崩溃。

(dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1())

这是失败的布尔逻辑。它是特定于实现的。具体来说,这是一组 5 个测试,必须全部通过,否则程序将终止。

dims <= 2 

Dims 小于或等于 2

data

数据不为零。可能是空指针测试。

(unsigned)i0 < (unsigned)size.p[0]

i0,不管是什么,都小于size.p[0],不管是什么。

(unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels())

关闭频道的数量少于其他频道的数量。

((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()

在我看来,某些东西的位深度一定是正确的。没有上下文我不能确定。

其余

in cv::Mat::at, file e:\opencv\build\include\opencv2\core\mat.hpp, line 538

只是行号和发生断言的文件。