断言在C ++问题中失败

时间:2012-07-16 14:17:54

标签: c++ assert

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

我已经尝试单步执行此代码来弄清楚为什么会失败,我似乎无法弄明白。不幸的是我有太多的文件可以在这里真正共享代码(单步执行pcBasebandOutput分配需要相当长的时间)。我知道这是一个比实际问题更复杂的问题。我的主要问题是:

  1. 是我的断言(pcBasebandOutput);必要的代码行?我只是问,因为在Visual Studio上运行此代码时,我的程序的结果是可取的。
  2. 在评估我的pcBasebandOutput变量时,为什么会将其评估为false?这是说没有实际分配给pcBasebandOutput的值吗?或者可以为其赋值,但它不是正确的类型(指向两个变量结构的指针,两者都是双精度数)?
  3. 谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

我不建议您从代码中删除assert,因为它是一名警卫,告诉您某些事情不符合预期的方式。并且忽略这一点并不是一个上帝的想法,因为它可能会在一条腿后面射击你

答案 1 :(得分:1)

  1. 只有你知道

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

  3. 断言的主要目的是允许IDE在assert命中的地方进入debuging会话。从那里你可以读取所有变量并查看callstack / threads。其他解决方案(比使用调试器)是添加大量日志记录,这在线程环境中可能会导致问题(日志记录非常慢)。