C++でstd :: string * ptrをstringstream :: str()経由で割り当てたいと思います。 私は以下のクラスを持っています。C++でstringstream :: str()経由で文字列ポインタを割り当てるときのセグメンテーションエラー
class A{
public:
A():ptr(nullptr){
}
void read(string& filename){ // this file contains a text.
std::ifstream ifs(filename);
std::stringstream ss;
ss << ifs;
*ptr=ss.str();
ifs.close();
}
private:
std::string *ptr;
};
int main(void){
A a();
std::string file="./file";
a.read(file);
return 0;
}
「* ptr」はテキストで割り当てることができます。 しかし、セグメンテーションフォルトは* ptr = ss.str()で発生します。 どうすればいいですか? 私は時間的オブジェクトを追加することが以下のように行く一つの方法だと思います。
//instead of *ptr=ss.str();
std::string str=ss.str();
ptr = &str;
しかし、一時的なオブジェクトを作成したくありません。 ありがとう
ユニット化されたポインタを逆参照しています。それが問題だ。 – gudok
実際に私はここでこのようなctorを省略しました。 nullptrでptrを初期化しても、セグメンテーションフォルトが発生します。 – mallea