为什么指针在函数转换期间会自行改变?

Pra*_*che 5 c++ pointers

在下面的例子中,我正在调用一个Func指针传递给它,但在被调用的函数中,该参数将指针值显示为完全虚假的东西.像下面的东西.

bool flag = Func(pfspara);--> pfspara = 0x0091d910 

bool Func(PFSPARA pfspara) --> pfspara = 0x00000005
{
    return false;
}
Run Code Online (Sandbox Code Playgroud)

为什么pfspara改变一些假指针?我无法在调试中重现问题,仅在生产中.

谢谢.

Ras*_*ber 8

如果您尝试在Visual Studio中调试优化代码,则不能总是依赖调试器正确显示变量值 - 尤其是如果变量未使用,以便编译器可能会优化它.

尝试运行此代码:

bool Func(PFSPARA pfspara)
{
    printf("%x\n", pfspara);
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Ore*_*esh 1

一般来说,这种情况永远不应该发生。可能导致此类症状的问题包括调用模块和调用者模块之间的编译选项不兼容、成员函数指针的错误转换或仅仅是编译器错误。您需要提供有关您的问题的更多详细信息:显示真实代码,指定您的编译器,指定调试与生产编译标志是什么,等等。