C++和C混合编程——windows已在XX.exe中触发一个断点

在进行C++和C混合编程时,作者遇到了运行时错误“windows已在XX.exe中触发一个断点”。问题源于C动态链接库的运行时库设置从MDd改为MTd,导致内存释放问题。通过分析,发现是C++调用C函数获取的指针在释放时出现问题。解决方案是C代码提供专门的释放指针接口,由C++调用来正确释放内存。这提醒我们在混合编程时要注意接口完整性和运行时库一致性。
摘要由CSDN通过智能技术生成

进来开发一个新功能需要使用C++和C混合编程,这其实也不难,相关方法网络上已经有详细的讲解。我遇到的问题就是编译,链接都没有问题,但在运行时出现【windows已在XX.exe中触发一个断点,其原因可能是堆被损坏,这也说明xx.exe中或它锁加载的任何dll中有bug】。其中C写的代码是一个动态链接库,这个问题就是我将C的编译选项由【使用MDd(多线程调试 DLL)】运行时库修改为【使用MTd(多线程调试)】运行时库引起的,代码没有任何修改,C++代码设置的是【使用MTd(多线程调试)】运行时库。


首先,我将C写的动态链接库运行时库设置还原之后,问题没有了。但这不是能说代码没有问题,所以还是慢慢查找原因,最后定位到是一个释放指针的地方出现的问题。大概原型是这样的:


C代码中:

char* getName()

{

return strdup("XXXXXXXXX");

}


C++代码中:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值