我在使用 stringstream 对象时遇到问题。我的类(class)有一个输入流作为成员。 我正在检查 obj->istream,然后检查 obj->istream->good()。
流存在但是对 good() 的调用崩溃了。我在 Visual Studio 2005 中。有什么线索吗?
如何重置 istream?
if (soap->is) {
if (soap->is->good())
return soap->is->read(s, (std::streamsize)n).gcount();
return 0;
}
该代码来自gsoap框架
std::istringstream in_stream;
in_stream.str("a buffer");
soap->is = &in_stream;
in_stream 超出范围,它属于本地堆栈,但是 ->is->good() 当 in_stream 不再存在时在该函数外部调用。
最佳答案
您已经回答了最后两行中的问题。您有一个指向超出范围的对象的悬空指针,使用它会导致未定义的行为(很可能是崩溃)。您需要确保该对象在需要时一直存在,方法是将其放置在更持久的作用域中或使用 new
分配它,并确保在不再需要时将其删除。
关于c++ - 为什么通过指针调用 std::stringstream good() 会导致崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824078/