gpt4 book ai didi

C++ 标准线程和列表段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-28 04:46:06 25 4
gpt4 key购买 nike

我是多线程的新手,我打算在线程中传递一个列表。

我希望一个线程可以添加一个字符串,另一个线程可以删除一个字符串。

我很困惑如何传递列表。

这是我的部分代码,它出现了段错误(核心已转储)

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_backbkName列表,但未构建此对象 - 您遇到了段错误。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com