2017-02-17 6 views
0

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; 

しかし、一時的なオブジェクトを作成したくありません。 ありがとう

+0

ユニット化されたポインタを逆参照しています。それが問題だ。 – gudok

+0

実際に私はここでこのようなctorを省略しました。 nullptrでptrを初期化しても、セグメンテーションフォルトが発生します。 – mallea

答えて

1

ptrを参照解除できるように初期化する必要があります。

A() { 
    ptr = new std::string(); 
} 
~A() { 
    delete ptr; 
} 
また

範囲を出た後、あなたのポインタでゴミを持っていますので、一時的な変数を割り当てること、進むべき道ではない(とない、nullptrに明らかに間接参照デできない)

+0

ありがとう! – mallea

関連する問題