我的代码是这样的:
vectorOfSharedPointers.resize(limit);
parallelLoop(index, 0 , limit, increment = 1){ //process all the elements in parallel
boost::shared_ptr<ClassA> ptrA;
ptrA.reset(new ClassA(ref1, ref2, ostreamRef1, ostreamRef2)); // creates object of ClassA and assigns it to ptrA
ptrA->setSomeAttribute(ref3); // calls some function on the object
vectorOfSharedPointers[index] = ptrA; // this vector is class variable
}
for(int i =0 ; i<limit ; i++){
boost::shared_ptr<ClassA> ptr = vectorOfSharedPointers[i];
ptr->someFunction();
}
ostreamRef1和ostreamRef2是ostream类型的引用,指向std :: ostringstream类型的变量并创建为[std :: ostringstream strStream;]。
第一次调用此代码时,一切正常。第二次调用它时,ptr-> someFunction(),当 ostreamRef1 为空时,此函数会抛出分段错误。我不是在任何地方调用close()。 ostreamRef1 仅在 someFunction ()内发现为null,当我在此代码块中检查它时,它在实例 someFunction 时不为null( ) 叫做。我怀疑的是为什么它在 someFunction ()内部无效,但在调用 someFunction ()之前和之后在此代码块中有效。
我认为可能的罪魁祸首可能是:多线程,shared_ptr,两者的结合。
可能的原因和解决方案是什么?