我最近在Visual Studio 2008中遇到了一些非常奇怪的行为,并且还没有能够解释它。我确实尝试在使用相同数据类型的非常小的应用程序中重新创建以下行为,但遗憾的是无法重新创建它。无论它是什么,它似乎都是我的大型应用程序中的其他东西的神器。
这个问题似乎与将值按结构传递给函数有关。请不要开始讨论通过引用/值传递结构的问题,已经有足够的内容了。允许传递值,这是在这里使用的。
简而言之,问题是调试器对于恰好是函数的第一个输入的结构成员显示的值不正确。以下屏幕截图显示了监视窗口,其中显示了结构的不同表示的值。注意" InternalId"是函数的输入,Visual Studio为其第一个成员' local_id'显示值1520176(十六进制为0x00173230)。但是,下面的printf语句打印出十进制值' 1028' (这是我期望local_id包含的值)。
在屏幕截图中注意,我已经创建了一个指向输入结构的指针" pInternalId",然后创建了另一个结构副本" InternalId2"通过取消引用指针。调试器正在正确显示这些变量。
注意" pInternalId"的值,它是0x00173230,这当然是InternalId的地址。这恰好是调试器为InternalId.local_id的内容显示的内容! WAT?
有没有人遇到过类似的东西?我的程序似乎运行正常,但这确实让我花了几个小时的疯狂追逐。
我将看看我是否可以获得更新版本的Visual Studio并尝试重新创建。