运行会产生错误的数字,但调试效果很好
Running gives wrong numbers, but debugging works well?
我的代码有问题。当我运行代码时,短"操作码"具有错误的值 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,大多数时候这是您实际上想要给变量但忘记的)。
您的recv_two_bytes
函数中似乎有一些这样的错误。在编译器上启用所有警告将有助于确定问题(如果问题更微不足道)。
还要注意其他错误,例如索引数组。
相关文章:
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 很好的语法来获取对向量/数组数据的大小引用?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 尽管一切看起来都很好,但值不会交换
- 为什么不同类型层次结构的指针之间的dynamic_cast定义得很好?
- 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是
- 对于短字符串来说,这是一个很好的哈希函数吗?
- 为什么指标有时效果很好,有时效果不佳?写下霍夫曼代码
- Red Hat:使用<atomic>编译很好,但链接器找不到__atomic_store_16;什么库?
- 使用移位的无符号数字作为数组的索引号是一种很好的做法
- 是否很好地使用状态模式来维护当前选定的对象?
- C++|以一种很好的方式将树(不一定是二进制的)打印到stdout
- 静态库单独使用很好,但在引用时会抛出错误
- 如果验证容器的大小并在同一条件语句下访问元素,这是很好的做法吗?
- 可变参数函数模板不能很好地使用 std::function 作为参数
- CoCreateInstance在发布中效果很好,但在调试中效果不佳
- 为什么我的.exe文件崩溃了,但在调试和发布版本中工作得很好
- 运行会产生错误的数字,但调试效果很好
- 当我为调试Lua编译程序时,运行得很好,但为什么我要为发布版编译它,我得到了一个c0000005错误
- c++什么是一个很好的分段错误调试器