我的代码有问题。当我运行代码时,短“操作码”具有错误值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
}
答案 0 :(得分:2)
通常,当程序的行为在正常运行和调试运行之间不同时,这是由于未定义的行为。一个常见的错误就是未初始化的变量。
执行程序时,会给出一个很可能未初始化的堆栈。在调试模式下,调试器可以初始化此堆栈。因此,未初始化的变量在调试和正常执行时很容易有不同的值(在调试模式下甚至为0,大多数情况下,你实际上想要给变量但却忘了)。
您的recv_two_bytes
函数似乎有这样的错误。在编译器上启用所有警告将有助于确定问题,如果它更简单。
请注意其他错误,例如索引数组。