【发布时间】:2013-11-27 09:22:46
【问题描述】:
我想在创建新线程时在运行时创建std::ifstream 对象,
ifstream&
getMultiDataReaderStream()
{
ifstream ifs;
ifs.open(m_dataReaderFileName.c_str(), ios::in | ios::binary);
return ifs;
}
void
runThread(void *lpData)
{
ifstream& ifs1 = storeManager.getMultiDataReaderStream();
// code for reading while EOF
ifs1.close();
}
但是,我得到分段错误在上面的代码中有问题......
【问题讨论】:
-
您正在返回对在函数 getMultiDataReaderStream 完成后被销毁的对象的引用。此引用被使用,这会导致段错误。
-
OK..还有其他方法可以做到这一点...
-
有几种方法可以解决这个问题。 1.传入对象的引用,然后调用open。 2. 使用 new 分配并返回一个指针。 2a.使用带有智能指针的解决方案 2。
标签: c++