c++ - 为什么通过指针调用 std::stringstream good() 会导致崩溃?

标签 c++ visual-studio visual-c++

我在使用 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/

相关文章:

C++ 通过指针访问二维数组中的连续值

c++ - 指针和函数的部分特化

mysql - Visual Studio MySQL 在运行时未定义

winapi - 如何使用visual c++在windows上运行应用程序在win32 API中启动

c++ - 在 VC11 中启用/禁用 SAFESEH?

c++ - 在字符串中添加整数值

c++ - 唤醒 asio 截止时间计时器

c++ - 如何在Visual Studio 2017中安装和使用boost 1.66.0

visual-studio - 如何在 Visual Studio 中导出/导入工具栏

c++ - 为什么 MSVC 在 std::bitset::count 的实现中不使用 __popcnt?