删除 std::线程指针会引发异常"libc++abi.dylib: terminating"
Deleting std::thread pointer raises exception "libc++abi.dylib: terminating"
在Mac OS X上的c++ 11和LLVM 6.0中,我首先创建了一个指向std::thread的内存分配的指针。
std::thread* th = new std::thread([&] (int tid) {
// do nothing.
}, 0);
然后我试图删除它。
delete th;
但是,编译并执行上面的代码会引发异常
libc++abi.dylib: terminating
Abort trap: 6
您创建的线程是joinable
,除非您将其join
或detach
,否则在执行线程对象的析构函数时将调用std::terminate
。所以你需要
th->join();
delete th;
std::thread
的早期建议隐式地在析构函数中使用detach
,但是当拥有thread
实例的线程在创建和join
之间抛出异常时,发现这会导致问题。N2802包含变更建议以及说明性示例。
最初的行为是从boost::thread
继承过来的,但它也在析构函数中弃用了隐式detach
。
与您的问题无关,但您不太可能需要动态分配线程对象,即使您这样做,也应该将其存储在unique_ptr
中。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- libc++abi未定义符号:_ZTVN10__cxxabif120__si-class_type_infoE
- MRB_THROW会导致libc++abi.dylib中的错误
- 字符串C :libc abi.dylib:终止未被发现的类型std :: out_of_range:basic
- MacOS 上的线程:libc++abi.dylib:终止
- "Unable to open file libc++abi.dylib" .程序生成,但在运行时崩溃。使用 xcode 10.1 (10B61)
- c++中的字符串库出错:libc++abi.dylib:终止,类型为std::out_of_range:basic_st
- 从新发行版和不同发行版加载LD_PRELOAD libstdc++.so.6和libc.so.6时出现浮点异常
- 我该如何解决它?libc++abi.dylib:以 std::invalid_argument 类型的未捕获异常终止:s
- 如何在 Xcode 中追踪"libc++abi.dylib: Pure virtual function called!"
- 删除 std::线程指针会引发异常"libc++abi.dylib: terminating"
- libc++ std::istringstream 不会抛出异常。错误?