运行错误的数字,但调试工作正常?

时间:2012-05-04 23:59:31

标签: c++ boost

我的代码有问题。当我运行代码时,短“操作码”具有错误值52496.所以我一步一步调试代码......当我这样做时,“操作码”具有正确的值4624!有人可以给我一个暗示吗?

void packet_get()
{
    boost::shared_ptr<boost::array<unsigned char, 2>> opc(new boost::array<unsigned char, 2>);
    recv_two_bytes(opc);
    unsigned short opcode;

    unsigned char * test[2];
    test[0] = &opc->at(0);  // *test[0] == 0x12
    test[1] = &opc->at(1);  // *test[1] == 0x10

    opcode = 0;
    int i = 0;
    for(i = 0; i <= 1; i++)
    {
        opcode = (opcode<<8) | *(test[i]);
    }
    // opcode should now be short 4624
}

1 个答案:

答案 0 :(得分:2)

通常,当程序的行为在正常运行和调试运行之间不同时,这是由于未定义的行为。一个常见的错误就是未初始化的变量。

执行程序时,会给出一个很可能未初始化的堆栈。在调试模式下,调试器可以初始化此堆栈。因此,未初始化的变量在调试和正常执行时很容易有不同的值(在调试模式下甚至为0,大多数情况下,你实际上想要给变量但却忘了)。

您的recv_two_bytes函数似乎有这样的错误。在编译器上启用所有警告将有助于确定问题,如果它更简单。

请注意其他错误,例如索引数组。