C++函数参数丢失了部分地址
C++ function argument losing part of address
我在C++中的Win8x64驱动程序上遇到了一个非常奇怪的错误(?),导致系统崩溃。
bool funcA(typedef1 arg1, typedef2 arg2)
{
funcB(arg1, arg2);
return true;
}
void funcB(typedef1 arg1, typedef2 arg2)
{
...do something
funcD(....)
....
}
背景信息:--我确实注意到司机似乎在代码的随机位置撞车,但并没有检查原因。-我在"funcD()"中做了一些更改,与崩溃无关。-我通过调试编译了二进制文件,并注意到(现在有好几次)它在"funcB"的开头崩溃了。
问题:问题出在"arg2"的地址上。正确的"arg2"地址位于调用"funcB"的"funcA"内部。但一旦进入"funcB","arg2"的地址就会被截断。
例如,arg2=0xffffe000'01ace148在"funcA"中,然后传递给调用"funcB"。但在"funcB"内部,它变为arg2=0x00000000'001ace148
我真的不知道这怎么会发生,所以欢迎任何建议!不认为我在下游"funcD"中的更改会导致这种情况,是吗?
编辑:
两个"typedef"都指向一些不同的结构。
请注意,"funcA"除了使用与它接收到的参数完全相同的参数直接调用"funcB"之外,什么都不做。"funcA"answers"funcB"都有相同的参数(不同的返回类型tho),但"funcA"接收参数的地址没有问题。
因此,问题很可能(或至少在表面上)是由WinDbg为这些函数设置断点引起的。
我测试了代码(编译的二进制文件),没有在WinDbg中设置任何断点,系统没有崩溃。我测试了调试和发布版本,两者都顺利通过。
为什么/怎么做?不知怎么的,WinDbg把地址搞砸了,或者WinDbg放大了一个隐藏的问题?有人有类似的经历,他们解决了?
相关文章:
- 如何在c++程序中找到函数的地址
- 函数名是c中该函数的第一条指令的地址吗
- 从 C++ 中的函数返回数组地址问题
- 为什么成员函数地址离自由函数这么远?
- 调用 lua 函数的地址为 C/C++?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 为什么每次执行时函数的地址都不同?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 获取函数的地址?
- 模板到函数的时刻地址是否可以作为指向某个函数的函数指针传递?
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 指针在函数调用后更改其地址
- 在 gcc/clang (C++) 中获取函数范围之外的标签地址
- 在每个运行时将函数保存到相同的地址
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 如何定义全局函数指针并分配给特定地址
- 常量引用函数参数的地址何时唯一?
- 打印我的Get MAC地址函数的std::字符串时出现意外输出
- 成员函数地址(函数指针)