2014-01-30 117 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; 

会做的伎俩

相关问题