C++ 创建pthread后立即执行Segfault

C++ 创建pthread后立即执行Segfault,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我正在处理一个生产者/消费者并发问题。问题是,我在尝试创建第一个线程后立即抛出一个segfault 相关代码: customer是一个声明为: struct pr2_customer { pthread_t customer_id; }; typedef struct pr2_customer customer; 客户是C++向量,声明为: vector<customer> customers; 向量客户; 创建线程: for(int i = 0; i < ncu

我正在处理一个生产者/消费者并发问题。问题是,我在尝试创建第一个线程后立即抛出一个segfault

相关代码:

customer是一个声明为:

struct pr2_customer
{
    pthread_t customer_id;
};
typedef struct pr2_customer customer;
客户是C++向量,声明为:

vector<customer> customers;
向量客户;
创建线程:

for(int i = 0; i < ncustomers; i++)
{
    cout<<"creating a customer\n";
    pthread_create(&customers[i].customer_id, &attr, customerAction, (void*)i);
}
for(int i=0;icout在我看来,您没有在
客户
中保留任何空间。我想这就是您需要的:

vector<customer> customers(ncustomers);
矢量客户(n客户);

您需要为您的客户分配一些空间。您只声明了一个客户向量,但该向量是空的。

因为您使用的是STL向量,所以应该使用方便的vector::iterator在向量上迭代,而不必考虑其大小

vector<customer>::iterator it;

很难理解您为什么要进行分段,因为您似乎只给出了一个片段。您的向量位于何处?它实际上是否有任何成员?N客户来自何处


我甚至不知道你为什么要将pthread_id包装在一个结构中,或者你打算以后扩展这个类?

你能至少发布customerAction()的一部分吗?你正在将一个整数转换为一个看起来不稳定的
void*
。谢谢。调整向量的大小使它(有点)工作。现在我只需要找出它死锁的原因。@prelic:因为使用vector不是为了速度(而是为了方便)。使用at()方法(而不是运算符[])获取对对象的引用。这将在返回引用之前检查索引是否有效。
for (it = customers.begin(); it != customers.end(); it++)