为什么在我的代码中删除ostringstream对象会导致分段错误?

Inv*_*tus 0 c++ stringstream ostringstream

#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
    ostringstream out;
    ostringstream tmpstr;
    tmpstr << "ritesh is here";
    out << tmpstr.str().c_str();
    out << endl;
    cout << out.str();
    if(tmpstr.rdbuf()!=NULL)
        cout << "tmpstr not null" <<endl;
    else
        cout << "tmpstr null" <<endl;
    delete tmpstr.rdbuf();   // This line gives me segmentation fault
    cout <<"deleted" << endl;
}
Run Code Online (Sandbox Code Playgroud)

该行delete tmpstr.rdbuf(); 给出了分段错误.我猜rdbuf返回char*指针因此.我可以使用删除来释放分配给的内存空间tmpstr

我错了吗?

Joh*_*ing 7

是的,你认为你可以delete做一些你没有分配的东西是错误的.

只有delete你自己new编写的东西.不要delete别人的东西.

  • *"不要删除其他人的东西."*除非他们告诉你*在文件中明确*. (4认同)
  • @LokiAstari:我想你在理论世界中是对的,其中所有的API都是如此精心设计的.当然他们不是,所以我拒绝你的假设是错误的.你似乎生活在一个幻想世界里; 我生活在现实世界中,你常常使用API​​返回一个指针,你负责解除分配.你在日常工作中做了什么让你可以自由地找到一个你认为"写得好"的API?我同意(和做)的包装器,但当然,在某些时候你还在释放那个内存,你只需稍微移动一下代码. (2认同)