gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:29 31 4
gpt4 key购买 nike

我的代码有问题。当我运行代码时,短“操作码”的错误值为 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
}

最佳答案

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

当你执行一个程序时,它会得到一个很可能未初始化的堆栈。在 Debug模式下,调试器可以初始化这个堆栈。因此,一个未初始化的变量在调试和正常执行中很容易有不同的值(甚至在 Debug模式下为 0,大多数时候你实际上想给变量赋值但忘记了)。

您的 recv_two_bytes 函数中似乎有类似的错误。如果问题更微不足道,则在编译器上启用所有警告将有助于确定问题。

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

关于c++ - 运行给出错误的数字,但调试工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457575/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com