malloc导致的各种崩溃:将iOS项目移植到arm64时校验和不正确

malloc导致的各种崩溃:将iOS项目移植到arm64时校验和不正确,ios,crash,malloc,memory-alignment,arm64,Ios,Crash,Malloc,Memory Alignment,Arm64,我们有少量的CPP代码与大量的C和Objective-C代码混合在一起。在大多数情况下,删除特定对象时会出现崩溃。这不是双重自由,因为我可以单步执行析构函数(它是一个CPP对象),一旦析构函数完成,进程将中止,并显示消息 malloc:**对象0x124ea55f8的错误:已释放对象的校验和不正确-对象可能在被释放后被修改 错误中报告的地址始终与被删除对象的基址相距440字节(类的大小为448字节),尽管即使我清除了析构函数中的所有释放代码(有效地造成内存泄漏),它仍将以相同的方式在相同的地址偏

我们有少量的CPP代码与大量的C和Objective-C代码混合在一起。在大多数情况下,删除特定对象时会出现崩溃。这不是双重自由,因为我可以单步执行析构函数(它是一个CPP对象),一旦析构函数完成,进程将中止,并显示消息

malloc:**对象0x124ea55f8的错误:已释放对象的校验和不正确-对象可能在被释放后被修改

错误中报告的地址始终与被删除对象的基址相距440字节(类的大小为448字节),尽管即使我清除了析构函数中的所有释放代码(有效地造成内存泄漏),它仍将以相同的方式在相同的地址偏移处崩溃

这在32位构建中从未发生过,代码已经稳定了相当一段时间。这也是此类碰撞中最常见的情况。我看到它在远离上述案例的地区随机出现过,这让我怀疑可能是不一致导致了更严重的问题


移植到arm64时是否存在这些已知问题?是否有工具帮助诊断这些问题?

我怀疑不同长度的数据结构可能是问题的根源,C/C++代码认为数据结构是填充的,但Obj C没有,或者相反。是的,我同意。不幸的是,代码库是巨大的,我担心问题可能源于更远的地方,导致不一致。实际上,在这个特定的线程上,调用堆栈根本不会进入Obj-C代码。这是一个C代码删除CPP对象的例子。