C++ 运行给出错误的数字,但调试工作正常吗?

C++ 运行给出错误的数字,但调试工作正常吗?,c++,boost,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 s

我的代码有问题。当我运行代码时,短“操作码”的值为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
}
void packet\u get()
{
boost::shared_ptr opc(新的boost::阵列);
接收两个字节(opc);
无符号短操作码;
无符号字符*测试[2];
测试[0]=&opc->at(0);//*测试[0]==0x12
测试[1]=&opc->at(1);//*测试[1]==0x10
操作码=0;
int i=0;

对于(i=0;i通常,当程序的行为在正常运行和调试运行之间不同时,这是由于未定义的行为造成的。其中一个常见错误是未初始化变量

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

您的
recv_two_bytes
函数中似乎出现了类似的错误。如果问题比较简单,启用编译器上的所有警告将有助于确定问题


还要注意其他错误,例如索引超出数组。

您是否有
*测试[0]
*测试[1]的正确值
?可能
recv\u two\u bytes
有一个未初始化的变量,在调试时幸运地设置为零,但在正常运行时为随机值。此外,在编译器中启用所有警告,它可能会告诉您问题所在。尝试一段时间后…我认为您是对的!非常感谢!我会将此作为一个答案发布,然后让t你可以接受它。