函数参数意外复制另一个参数的指针地址?

发布于 2024-12-09 05:22:45 字数 884 浏览 3 评论 0原文

今天我遇到了一个相当奇怪的错误。本质上发生的事情是在函数 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倚栏听风 2024-12-16 05:22:45

事实证明,当使用发布模式与调试模式时,这是 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文