SIGSEGV shared_ptr中的无序列图
Unordered map in shared_ptr SIGSEGV
我正在为语音识别器构建服务器。我正在使用线程池来为客户端提供服务。
我需要创建无序列图来保存每个客户端的识别器实例。所以我创造了this_
std::shared_ptr<std::unordered_map<int ,SOnlineSpeechRecognizerI *>> user_recognizers;
std::mutex rec_mutex;
因此,在客户端连接上,我创建了识别器的实例,我需要将数据插入user_recognizers。我的lambda函数是:
echo.onopen=[user_recognizers, &rec_mutex](auto connection) {
std::cout << "Server: Opened connection " << (size_t)connection.get() << std::endl;
SOnlineSpeechRecognizerI *rec = recognizer::initRecognizer();
if(!rec){
connection.
}
std::pair<int, SOnlineSpeechRecognizerI *> myrec ((size_t)connection.get(), rec);
rec_mutex.lock();
(*user_recognizers).insert(myrec); //error here
rec_mutex.unlock();
};
connection.get() 返回连接的 int ID。
我正在接受SIGSEGV。瓦尔格林德给了我一点提示:
Access not within mapped region at address 0x8
显然你没有初始化user_recognizers
,因此当你访问它时,它有一个空指针导致段错误。
您可以像这样初始化它:
using MyMap = std::unordered_map<int ,SOnlineSpeechRecognizerI *>;
std::shared_ptr<MyMap> user_recognizers { std::make_shared<MyMap>() };
(我假设user_recognizers
是一个类成员,所以不能用auto
声明)
相关文章:
- 递归无序映射
- c++找不到具有相同哈希的无序集合元素
- 正在将无序映射设置为无序映射的值
- 智能指针作为无序映射键,并通过引用进行比较
- 如何使用set实现无序数据结构?
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 如何禁用 CPU 的无序执行
- 从C++无序集合中高效提取元素
- 打印无序映射的第二个元素,即集合
- 引用 std::shared:ptr 以避免引用计数
- 当我将其插入无序地图时,矢量的容量为 0
- 代码块中无序多集的编译错误17.12
- 由并发无序映射查找线程调用的函数是否安全?
- 如何按值对无序哈希映射进行排序
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 使用无序映射在STL中存储键值对
- 为C++中的无序映射获取给定输入键的错误值
- 如何将一个单词拆分成字母,并将它们放入一个无序的列表/集合中