我有以下代码:
#include <memory>
#include <functional>
#include <boost/lockfree/queue.hpp>
#define _ThreadPoolLength_ 100
class thread_pool {
public:
thread_pool() : q(_ThreadPoolLength_) {}
private:
mutable boost::lockfree::queue<std::function<void(int id)> *> q;
};
class Worker
{
thread_pool workerPool;
};
Worker* worker;
int main() {
worker = new Worker();
delete worker;
return 0;
}
如果用 编译它clang++ -fsanitize=address,undefined code.cpp
,那么在运行期间它会产生类似的东西:
构造函数调用未对齐的地址 0x6060000025a0 用于类型 'boost::lockfree::queue *>::node',这需要 64 字节对齐 0x6060000025a0:注意:指针指向此处
01 00 00 3c 40 25 00 00 60 60 be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be bebe be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be be安装
#0 0x519fc5 in boost::lockfree::queue<std::function<void (int)>*>::node* boost::lockfree::detail::freelist_stack<boost::lockfree::queue<std::function<void (int)>*>::node, std::allocator<boost::lockfree::queue<std::function<void (int)>*>::node> >::construct<true, false, boost::lockfree::queue<std::function<void (int)>*>::node*>(boost::lockfree::queue<std::function<void (int)>*>::node* const&)
#1 0x517e77 in boost::lockfree::queue<std::function<void (int)>*>::initialize()
#2 0x51743c in boost::lockfree::queue<std::function<void (int)>*>::queue(unsigned long)
#3 0x51713f in thread_pool::thread_pool()
#4 0x517048 in Worker::Worker()
#5 0x516ed9 in main
#6 0x7f6c3cb6bb96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
#7 0x41a5f9 in _start
摘要:UndefinedBehaviorSanitizer:未定义的行为...
我怀疑错误是由 引起的boost::lockfree::queue<std::function<void(int id)> *>
,但为什么呢?有没有办法解决它?
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
最后,我参考了一篇博boost::lockfree::queue<std::function<void(int id)> *>
文,用类似的类替换了使用。