在c ++中通过stringstream :: str()分配字符串指针时出现分段错误

时间:2017-02-17 11:38:56

标签: c++11 stringstream

我想在C ++中通过stringstream :: str()分配std :: string * ptr。 我下面有一节课。

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;
}

我期待&#34; * ptr&#34;可以通过文本分配。 但是,分段错误发生在* ptr = ss.str()。 我怎样才能做到这一点? 我认为附加时态对象是下面的一种方法。

//instead of *ptr=ss.str();
std::string str=ss.str(); 
ptr = &str;

但我不想创建时态对象。 谢谢

1 个答案:

答案 0 :(得分:1)

您必须将ptr初始化为能够取消引用它。 (而不是nullptr,显然不能解除引用)

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

此外,分配时间变量不是一种方法,因为在离开范围后,指针中会有垃圾