C++ std 线程并列出分段错误(核心转储)
C++ std thread and list Segmentation fault (core dumped)
我是多线程的新手,我将在线程中传递一个列表。
我希望一个线程可以添加一个字符串,另一个线程将删除一个字符串。
我很困惑如何通过列表。
这是我代码的一部分,它得到了分段错误(核心转储)
struct BOOK {
list<string> bookName;
};
class itemE {
...
itemE():
bookList((BOOK*)malloc(sizeof(BOOK)))
{
count = 0;
m_addThread = thread(&itemE::add, this, ref(bookList->bookName));
...
}
void add(list<string>& bkName)
{
...
m_mutex.lock();
bkName.push_back(name);
m_mutex.unlock();
...
}
};
我尝试修改了它
m_addThread = thread(&itemE::add, this, bookList);
跟
void add(BOOK* bk)
{
...
bk->bookName.push_back(name);
...
}
但它仍然是一样的
itemE::add
是线程的主体,在这个函数成员中,你在bkName
列表中调用push_back
,但这个对象不是构造的 - 你得到了分段错误。
malloc
函数仅分配内存。调用此行malloc(sizeof(BOOK))
只分配了sizeof(BOOK)
个字节,但未调用bookName
成员的构造函数。您应该使用new
来分配内存并构造 BOOK 对象。
itemE():
bookList(new BOOK)
{
...
new BOOK
将调用list<string> bookName
的默认构造函数,然后您可以在此成员上使用 exmaplepush_back
。
考虑改用lambda
itemE()
:bookList(new BOOK)
{
count = 0;
m_addThread = thread([this]() { add(bookList->bookName); });
}
相关文章:
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 分段错误(核心转储)但无法弄清楚
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 合并排序:分段错误核心转储
- C++:分段错误(核心转储)
- 从 pybind11 构建导入模块时出现"分段错误(核心转储)"
- qt C++命令行代码中的分段错误(核心转储)
- C++ atof - 分段错误(核心转储)
- 为什么我的代码包含错误分段错误(核心转储)?
- 运行编译的 a.out 后出现分段错误(核心转储)错误
- 运行我的代码时出现分段错误(核心转储)问题
- C++代码的分段错误(核心转储)
- 为什么我在执行main之前就出现分段错误(核心转储)
- OpenCV 分段错误(核心转储)在使用 cv::Mat::at 时
- 分段错误(核心转储) 重定向输入
- C++字符串中的分段错误(核心转储)
- 树实现给出分段错误(核心转储)错误 c++ 11