2

我有一个代码块,我在一个 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);

底部代码发生在 thread 中a。为什么当我尝试打印出双端队列的一个元素时,我得到一个错误,但我可以得到它的大小?

4

2 回答 2

5

pthread_create将在您的线程函数开始执行之前很久就返回。你的deque意志早就被摧毁了。您需要在堆上创建它。

于 2012-04-30T22:54:03.620 回答
1

我认为这是因为您试图将对甲板的引用转换为 void*,试试这个:

 deque<string> * myDeque = new deque<string>();

然后使用 -> 访问其功能。

然后您可以将 myDeque 直接转换为 void 指针,它将保持初始化状态。

IE。:

 (void*)myDeque

希望这可以帮助。

于 2012-04-30T22:52:40.330 回答