是否可以看到c ++中返回的值?

时间:2013-05-20 22:54:29

标签: c++ list return

所以..我正在使用断言测试函数:( pBola1的值为1)

assert(BomboTest.TreureBola(1)==pBola1);

BomboTest.TreureBola它是一个返回列表的随机数(在这种情况下必须返回1)的函数。

cBola* cBombo::TreureBola(int num)
{
    int posicio_aleatoria;

    posicio_aleatoria= rand() % (num);

    return(Boles.TreureElement(posicio_aleatoria)); 
}

TreureElement它是一个函数,它返回一个动态列表的元素,知道你想要提取的元素的位置(在这种情况下返回'retorn',即1)

cBola* cLlista::TreureElement(int posicio)
{
    int i;
    cBola* recorreLlista;
    cBola *retorn;
    recorreLlista=primer;
    retorn = primer;
    i=0;

    if (posicio == 0)
    {
        primer = (*primer).getSeguent();
    }
    else
    {
        // Busquem la posició //
        while(i < posicio)
        {
            recorreLlista= retorn;
            retorn = (*retorn).getSeguent();
            i++;
        }
        (*recorreLlista).setSeguent( (*retorn).getSeguent() );
    }
    numElements--;
    return retorn;
}

我不知道为什么但断言失败了。我可以看到TreureElement返回的值,因为我有指针'retorn',但我不知道TreureBola返回的值。有什么方法可以看到TreureBola在调试器中返回的值?

PD:我正在使用visual studio 2010

3 个答案:

答案 0 :(得分:6)

只需创建一个本地

cBola* pTemp = BomboTest.TreureBola(1);
assert(pTemp==pBola1);

你可以查看dissasembly并检查返回注册表,但这看起来有点矫枉过正。以上是正确的方法,其他人会在将来遇到同样的问题时感谢你。

答案 1 :(得分:5)

您可以随时暂时更改

assert(BomboTest.TreureBola(1)==pBola1);

to`

auto tmp=BomboTest.TreureBola(1);
assert(tmp==pBola1);

并在第一行放置一个断点。

答案 2 :(得分:1)

我会在assert周围写一个小包装来代替:

template <typename T>
void compare(const T& lhs, const T& rhs)
{
  if (lhs != rhs)
    cout << "The values were not the same! " << lhs << " vs. " << rhs << endl;
  assert(lhs == rhs);
}

这仍然会调用assert,但首先你会得到一些(希望)有用的输出。

所以不要打电话:

assert(BomboTest.TreureBola(1)==pBola1);

你会打电话:

compare(BomboTest.TreureBola(1), pBola1);

这有一个额外的好处,你可以在这里放置一个断点,看看TreureBola在调试器中返回的内容。