2017-02-17 45 views
0

我想通過C++中的stringstream :: str()來分配std :: string * ptr。 我下面有一堂課。在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才能取消引用它。 (而不是nullptr,不能DE明顯提領)

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

此外,分配時間變量不是很長的路要走,因爲在離開範圍後,你會在你的指針有垃圾

+0

非常感謝! – mallea