问题描述
我有一个ostringstream
对象,我试图在其中插入一些字符,但是ostringstream
对象位于名为shared_ptr
的{{1}}中。当我尝试解除对pOut
的引用时,总是会遇到访问冲突错误。
这是我要做的事情的简化版本:
pOut
在我看来,这应该可以工作,因为下面显示的程序可以编译并且可以正常运行:
#include <iostream>
#include <sstream>
int main()
{
std::shared_ptr<std::ostringstream> pOut;
*pOut << "Hello";
std::cout << pOut->str();
}
为什么取消对对象的引用会引发访问冲突错误,我该如何解决此问题?以下是我遇到的错误。
#include <iostream>
#include <sstream>
int main()
{
std::ostringstream out;
out << "Hello";
std::cout << out.str();
}
解决方法
您创建了指针对象,但最初将其设置为nullptr
或NULL
或0
。因此访问该内存肯定会导致分段错误或访问冲突。您需要为其赋予价值。所以代替这个:
std::shared_ptr<std::ostringstream> pOut;
使用此:
std::shared_ptr<std::ostringstream> pOut = std::make_shared<std::ostringstream>();
这应该可以解决您的问题。