gpt4 book ai didi

c++ - 从 C++ 代码中的 C 回调诊断内存损坏

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:48 25 4
gpt4 key购买 nike

我正在尝试在某些 C++ 代码中调用 C 库。为简单起见,假设 C 库的行为为

utility_class data;
callback(double input[], void* data);

void* mem;
c_library_init(mem);
c_library_data(mem, &data);
c_library_callback(mem, &callback);
c_library_action(mem);
c_library_free(mem);

然后我在 C++ 中定义了一个回调

extern "C"
void callback(double input[], void* data) {
}

如果 callback 为空,那么代码运行正常,但如果我尝试分配一个标准 vector ,

extern "C"
void callback(double input[], void* data) {
std::vector<double> temp(5);
}

然后我得到一个 malloc 错误(c_library_callback 显然至少调用了一次 callback 没有问题,但在调用两三次后出错),

main(33158,0x7fff75ea5310) malloc: *** error for object 0x7fe71ac0cf08:  
incorrect checksum for freed object - object was probably modified after being
freed.

使用 Allocations 检查内存显示对象分配在 0x7fe71ac0cf000x7fe71ac0cf10,但不在 0x7fe71ac0cf08 所以它看起来像内存损坏某种。我什至不确定为什么在 C++ 函数中调用 free 。此外,这似乎只发生在某些回调中,而不是其他回调。

关于如何调试 C 和 C++ 接口(interface)上发生的事情有什么建议吗?直接在代码中或通过 Xcode 的 Instruments 检测诊断是最方便的,但我会尝试任何方法。谢谢!

最佳答案

您可以在 Mac 上试用 valgrind。这对我诊断与内存访问和修改相关的问题非常有帮助。

这里有更多信息 install valgrind在 Mac 上。

关于c++ - 从 C++ 代码中的 C 回调诊断内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com