我有一段代码,我在pthread中(让我们调用这个线程a
),我希望产生一个新的pthread(让我们调用这个线程b
)。线程b
需要传递一个双端队列,我有以下代码:
void* process_thread_b(void* arg)
{
deque<string> *ptr = (deque<string>*)arg;
cout << "Size -" << ptr->size() << endl;
deque<string>::iterator it;
for(it = ptr->begin(); it != ptr->end(); it++)
{
cout <<(*it) << endl;
}
}
上面的代码是线程b's
代码。它传递一个双端队列并正确打印出大小。当我尝试打印出任何元素时,我得到:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Abort (core dumped)
当我产生pthread时,我使用下面的代码......
deque<string> myDeque;
// Add strings to deque here...
pthread_t dispatchCommands;
pthread_create(&dispatchCommands, NULL, &process_thread_b, (void*)&myDeque);
底部代码发生在线程a
中。为什么当我尝试打印出deque的一个元素时,我收到一个错误,但我可以得到它的大小?
答案 0 :(得分:5)
pthread_create
将在线程函数开始执行之前很久就返回。你的deque
很久以前就会被摧毁。您需要在堆上创建它。
答案 1 :(得分:1)
我认为这是因为你试图将对牌组的引用转换为无效*,试试这个:
deque<string> * myDeque = new deque<string>();
然后使用 - &gt;访问其功能。
然后你可以将myDeque直接转换为void指针,它将保持初始化状态。
即。 :
(void*)myDeque
希望这有帮助。