gpt4 book ai didi

c++ - 在 OSX 10.8.2 中覆盖 `new` 和 `delete` 时崩溃

转载 作者:行者123 更新时间:2023-11-28 03:26:33 24 4
gpt4 key购买 nike

我最近开始在我的代码中崩溃,我不得不覆盖默认的 newdelete,我不完全确定,但可能是在最近的软件更新。

我正在运行 Osx 10.8.2 build 12C54 和以下 gcc:

i686-apple-darwin11-llvm-gcc-4.2 (海湾合作委员会) 4.2.1

这是我崩溃的堆栈跟踪。

(gdb) bt
#0  0x00007fff8f2a4212 in __pthread_kill ()
#1  0x00007fff8fdecaf4 in pthread_kill ()
#2  0x00007fff8fe30dce in abort ()
#3  0x00007fff8fe04959 in free ()
#4  0x00000001009cd947 in foundation::aligned_free ()
#5  0x00000001009e5322 in (anonymous namespace)::delete_impl ()
#6  0x00000001009e53e8 in operator delete[] ()
#7  0x00007fff87316ecc in TPropertyStream::SetLength ()
#8  0x00007fff87286099 in TPropertyStream::WriteData ()
#9  0x00007fff87286037 in TPropertyStream::Write ()
#10 0x00007fff87285ce7 in IAStoreStream::MaybeFlushBuffer ()
#11 0x00007fff87285641 in BuddyStorage::Commit ()
#12 0x00007fff87316c4c in TPropertyInfo::FlushChanges ()
#13 0x00007fff873169af in TPropertyInfo::FlushChanges ()
#14 0x00007fff8729ac47 in THFSPlusPropertyStore::FlushChanges ()
#15 0x00007fff872dc5e4 in TFSVolumeInfo::FlushVolumes ()
#16 0x00007fff872b087a in TNode::HandleFlushVolumes ()
#17 0x00007fff872684d3 in TNode::HandleNodeRequest ()
#18 0x00007fff872db4e7 in __block_global_1 ()
#19 0x00007fff87268040 in ExceptionSafeBlock ()
#20 0x00007fff87267fe1 in __PostNodeTaskRequest_block_invoke_0 ()
#21 0x00007fff8e074f01 in _dispatch_call_block_and_release ()
#22 0x00007fff8e0710b6 in _dispatch_client_callout ()
#23 0x00007fff8e07247f in _dispatch_queue_drain ()
#24 0x00007fff8e0722f1 in _dispatch_queue_invoke ()
#25 0x00007fff8e0721c3 in _dispatch_worker_thread2 ()
#26 0x00007fff8fdedcab in _pthread_wqthread ()
#27 0x00007fff8fdd8171 in start_wqthread ()

有没有人遇到过类似的问题?

最佳答案

Jon 非常友好地在 SO 上发布了我们的问题。我是相关代码的作者。多年来,我们一直在 Mac OS X 上发布代码,没有出现任何问题。我们还在 Windows(32 位和 64 位)和许多 Linux 版本上发布。最近才在 Mac OS X 上出现问题。

基本上,我们的应用程序是由使用几个共享库(Mac OS X 上的 .dylib)的几个二进制文件组成的。 newdelete 的所有变体都在这些共享库之一中重载。它们不应该被其他共享库和二进制文件导出和使用,事实上它们不在 Windows 上。作为引用,重载运算符是 here .

我不确定到底发生了什么,但是上面的调用堆栈似乎表明某些 Mac OS X 代码正在使用我们自己的 delete 运算符释放内存,我不能完全确定内存是通过我们的 new 重载分配的,还是完全由另一个内存子系统分配的。

无论如何它都不应该使用我们的运算符。理想情况下,重载的 newdelete 将隐藏到外部,就像 Windows 上的情况一样(因为共享库符号在该平台上默认隐藏)。

代码是在 Mac OS X 10.8.2 上使用 gcc 4.2.1 (686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (基于 Apple Inc. build 5658) (LLVM build 2336.11) 构建的.00))。除其他外,我们使用 Qt 4.8.2(撰写本文时最新的稳定版本)的预构建二进制文件。我们最近在 Mac OS X 上切换到更新版本的 Qt,这可能与问题有关吗?会不会是预构建的 Qt 二进制文件与我们的代码有些不兼容? (我们针对 Qt 进行动态链接,因此这应该不是问题。)

希望有足够的细节来开始对话。

弗兰兹

关于c++ - 在 OSX 10.8.2 中覆盖 `new` 和 `delete` 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750295/

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