作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是多线程的新手,我打算在线程中传递一个列表。
我希望一个线程可以添加一个字符串,另一个线程可以删除一个字符串。
我很困惑如何传递列表。
这是我的部分代码,它出现了段错误(核心已转储)
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
是你的线程的主体,在这个函数成员中你调用 push_back
在 bkName
列表,但未构建此对象 - 您遇到了段错误。
malloc
函数只分配内存。调用此行 malloc(sizeof(BOOK))
只有sizeof(BOOK)
字节已分配,但 bookName
的构造函数成员没有被调用。你应该使用 new
分配内存并构造您的 BOOK 对象。
itemE():
bookList(new BOOK)
{
...
在new BOOK
list<string> bookName
的默认构造函数将被调用,然后你可以使用例如push_back
在这个成员上。
关于C++ 标准线程和列表段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49253171/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!