断言在C++问题中失败

Assertion Failed in C++ questions

本文关键字:失败 问题 C++ 断言      更新时间:2023-10-16

我正在处理的一些代码遇到问题。此代码在基于linux的系统上运行,我收到的错误如下:/root/cvswork/pci_sync_card/Code/SSBSupport/src/CRCWbHfChannel/CCRWbHfMSBSimulator.cpp:447:虚拟void CCRCWbHfMSBSimulator::Process():断言"pcBasebandOutput"失败。

我试着通过这个代码来弄清楚为什么会失败,但我似乎无法弄清楚。不幸的是,我有太多的文件无法在这里真正共享代码(完成pcBasebandOutput分配需要相当长的时间)。我知道这是一个比实际问题更复杂的问题。我的主要问题是:

  1. 是我的断言(pcBasebandOutput);是否需要代码行?我之所以这么问,是因为当在Visual Studio上运行这些代码时,我的程序的结果是令人满意的
  2. 当它评估我的pcBasebandOutput变量时,为什么它会将其评估为false?这是否意味着没有任何值实际分配给pcBasebandOutput?或者可以给它赋值,但它的类型不对(指针指向两个变量的结构,这两个变量都是双精度的)

谢谢!

assert检查逻辑条件。如果条件为false,则断言失败。所以写assert(cond)在逻辑上与写相同

if (!cond)
{
    assert(false);
}

我不建议您从代码中删除assert,因为它是一个保护程序,告诉您某些事情没有按预期进行。忽略这一点并不是上帝的主意,因为它可能会在

之后射中你的腿
  1. 只有你才能知道

  2. pcBasebandOutput的类型是什么?也许它没有正确初始化?

assert的主要目的是允许IDE在assert命中的地方进入调试会话。从那里您可以读取所有变量并查看调用堆栈/线程。另一个解决方案(除了使用调试器)是添加大量的日志记录,这在线程环境中可能会单独导致问题(日志记录非常慢)。