#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;
}
行delete tmpstr.rdbuf();
は、セグメント化エラーを示します。私はrdbufがchar *ポインタを返すと思います。私はそれに割り当てられたメモリ空間を解放するために削除を使用することができますtmpstr
私のコードのようにストリングストリームオブジェクトを削除すると、セグメンテーションフォルトが発生するのはなぜですか?
私は間違ってどこか?
[Resource Acquisition is Initialization](http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization)。それを知っている。大好きです。 –
@EdS:良いアドバイスをしていますが、ここでどのように適用されるのか分かりません。 –
@ JohnDibling:これは 'std :: string'がどのように動作するかを示します。あなたが理解すれば、あなたはここで何かに 'delete'を呼び出す必要はないことを理解するでしょう。これは、OPが求めているものよりも高いレベルのコンセプトですが、 'string'や' vector'などを使うつもりなら、何が起こっているのかを理解する必要があります。 –