2014-01-30 114 views
1

嗨需要幫助該段錯誤不知道爲什麼我得到它嘗試cin入字符串時出現分段錯誤?

Movie *newMovie = (Movie*) malloc(sizeof(Movie)); 
cout << "\nEnter the next movie title: "; 
cin >> newMovie->title; 

class Movie { 
    public: 
    Movie(); 
    std::string title; 
    int year; 
    GenreType genre; 
}; 

我檢查DGB和分割的故障出現在CIN行有什麼建議?順便說一句標題是電影類型的一個實例,並且是std :: string

+0

後您提供'類電影',我們可能會看到'title'是一個'char'指針,你需要使用'malloc'來初始化。 –

+7

不要使用'malloc'來分配C++對象。使用'new'。 'malloc'不會調用構造函數。在這種情況下,「title」未被初始化。用Movie類更新的 – Adam

+0

沒有使用char指針 – user3251111

回答

3

不要在C++中使用malloc,除非你真的知道你需要它(提示:你不需要)。

malloc分配內存,但它不會調用任何構造函數 - 它只是給你一個字節塊來處理你認爲合適的。當沒有構造這些字節時假裝有一個對象不起作用。

因此,只要做到這一點:

Movie *newMovie = new Movie(); 
cout << "\nEnter the next movie title: "; 
cin >> newMovie->title; 

而且你需要擺在首位動態分配?爲什麼不乾脆:

Movie newMovie; 
cout << "\nEnter the next movie title: "; 
cin >> newMovie.title; 
1

簡單AMD安全的方法,這樣做將不使用動態分配:

Movie newMovie; 
cout << "\nEnter the next movie title: "; 
cin >> newMovie.title; 
1
Movie newMovie; 
cout << "\nEnter the next movie title "; 
cin >> newMovie.title; 

會做的伎倆

相關問題