指针函数参数已损坏,堆栈已损坏
Pointer function argument corrupted, Stack corruption?
Im正在构建一个C++库,该库由python通过ctypes调用。该函数有一个指向结构的指针作为参数,并将其传递给其他(内部)函数。它看起来像这样:
extern "C" __declspec(dllexport) void USBEndpoint_subscribe(USBEndpoint* endpoint, CALLBACK callback) {
try {
subscribe_internal(endpoint, callback);
} catch (int e_code) {
exception_report(__FILE__, __LINE__, e_code);
} catch (...) {
exception_report(__FILE__, __LINE__);
}
void subscribe_internal(USBEndpoint* endpoint, CALLBACK callback)
{
...
}
问题是,在USBEndpoint_subscribe接收的端点的值与输入subscribe_internal的值不同。例如:
在调试时,我可以看到USBEndpoint_subscribe收到了:端点=0x00000000088f0680(回调=0x0000000000540f50)
一旦我进入subscribe_internal,在subscribe_interal内部,值为:端点=0x000007fef15f7740(回调=0x0000000000000000)。
我还没有生成其他线程,我正在以发布模式编译库**。我唯一的怀疑可能是堆栈损坏,但实际上我知道发生了什么
任何可能发生的事情的暗示都是非常受欢迎的。
**我在调试模式下编译了python,但使用spider设置很慢,如果我使用调试编译版本,我会失去交互式控制台,所以我更喜欢使用发布版python并在发布版中编译我的库。
编辑:
按照建议,我使用了python的调试版本和库的调试编译。但我仍然得到了相同的行为(端点:0x0000000002be80e0->0x0000000000000000,回调:0x0000000000320f88->0x00000000024d24b8)。这里没有其他非发布模式的有用信息。
我使用CDLL("path")加载库,这使得调用约定cdecl。即使我使用/Gd在VS2008中编译,它似乎也在使用其他约定。将__cdecl附加到函数声明中可以解决此问题。
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 变量周围的堆栈'sortArray'已损坏
- 变量周围的堆栈'folderPath'已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'k'已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 数组问题:变量周围的堆栈'arr'已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量周围的堆栈'Yarray'已损坏
- 变量"name"周围的堆栈已损坏C++
- 运行时检查失败#2 - 变量周围的堆栈'myArray'已损坏.- 似乎无法弄清楚如何删除此错误
- MS 工作室 17 变量周围的堆栈已损坏