函数参数意外复制另一个参数的指针地址?
今天我遇到了一个相当奇怪的错误。本质上发生的事情是在函数 foo
内部,第一个参数被设置为指针 crosssegments
的指针值。因此,假设 crosssegments
的位置位于 0x0045,那么 iMeaninglessdata
将设置为 0x0045。如果我取出 iMeaninglessData
并简单地将 o1
作为第一个参数,则 o1
将等于 0x0045。如果我在调用函数之前暂停调试器,iMeaningless
数据和 crosssegments
具有不同的指针地址。
void Foo(int *iMeaninglessData, handle o1, handle o2, handle o3, int iHeight, int iProfileHeight, handle o4, std::vector<object> * crossSegments, int *iProfileArray)
{
//...code
}
这是我调用该函数的方式:
std::vector<FormSummary> * crossSegmentsTop = new std::vector<FormSummary>();
int iZero = 0;
Foo(&iZero, o1, o2, o3, 10, 50, o4, crossSegmentsTop, iProfileArray);
我很困惑这是如何发生的。您认为堆栈会发生什么事情吗?
谢谢你,
- 阿利卡
Today I've run across a rather strange error. Essentially what is happening is inside the function foo
the first parameter is being set to the pointer value of the pointer crosssegments
. So say crosssegments
is location at 0x0045 then iMeaninglessdata
will be set at 0x0045. If I take out iMeaninglessData
and simply have o1
as the first parameter than o1
will be equal to 0x0045. If I pause the debugger before the function is called iMeaningless
data and crosssegments
have different pointer addresses.
void Foo(int *iMeaninglessData, handle o1, handle o2, handle o3, int iHeight, int iProfileHeight, handle o4, std::vector<object> * crossSegments, int *iProfileArray)
{
//...code
}
Here is how I am calling the function:
std::vector<FormSummary> * crossSegmentsTop = new std::vector<FormSummary>();
int iZero = 0;
Foo(&iZero, o1, o2, o3, 10, 50, o4, crossSegmentsTop, iProfileArray);
I'm very confused as to how this could be happening. Do you think something could be happening to the stack?
Thank you,
- Alikar
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
事实证明,当使用发布模式与调试模式时,这是 Visual Studio 2008 调试器中的一个错误。我正在生成 PDB 文件,但显然在您使用该值之前(例如在命令窗口中),它无法正确找到变量的指针。
Turns out it is a bug in the visual studio 2008 debugger when used with release mode versus debug mode. I'm generating the PDB file, but apparently until you use the value, such as in a command window, it doesn't correctly locate the pointer for the variable.