C++ C++;程序在从Main调用函数时崩溃?

C++ C++;程序在从Main调用函数时崩溃?,c++,C++,我有一个类Movie,其中包含数据成员类型演员和大小 class Movie { private: string* Actors; string* genre; int size = 0; 我使用setters和getter方法初始化数据成员。首先,通过调用 setsize() 类型的成员函数,然后调用成员函数 set_genre(). 从main。问题来了,每当我重新打电话给 setsize() 对于Actors,设置Actors的大小并调试我的程序,它接受类

我有一个类
Movie
,其中包含数据成员
类型
演员
大小

class Movie
{
private:
    string* Actors;
    string* genre;
    int size = 0;
我使用setters和getter方法初始化数据成员。首先,通过调用

setsize()
类型的成员函数,然后调用成员函数

set_genre(). 
从main。问题来了,每当我重新打电话给

setsize()
对于Actors,设置Actors的大小并调试我的程序,它接受
类型
Actors
的输入,但在显示时会崩溃,显示抛出的异常。我尝试了很多事情,但我不知道如何解决这个问题。请任何人帮我做这个,这是我的实验室指导老师的任务

class Movie
{
private:
    string* Actors;
    string* genre;
    int size = 0;
public:
    Movie()
    {
        Actors = new string[size];
        genre = new string[size];
    }
    void setsize(int x)
    {
        size = x;
    }
    void set_actors()
    {
        Actors = new string[size];
        for (int i = 0; i < size; i++)
        {
            cout << "ACTOR " << i + 1 << endl;
            getline(cin, Actors[i]);
        }
    }
    void set_genre()
    {
        genre = new string[size];
        for (int i = 0; i < size; i++)
        {
            cout << "GENRE " << i + 1 << endl;
            getline(cin, genre[i]);
        }
    }
    void display_actors()
    {
        for (int i = 0; i < size; i++)
        {
            cout << Actors[i] << endl;
        }
    }
    void display_genre()
    {
        for (int i = 0; i < size; i++)
        {
            cout << genre[i] << endl;
        }
    }
    ~Movie()
    {
        delete[]genre;
        delete[]Actors;
    }
};
类电影
{
私人:
弦乐演员;
弦乐*体裁;
int size=0;
公众:
电影(
{
Actors=新字符串[大小];
流派=新字符串[大小];
}
无效设置大小(整数x)
{
尺寸=x;
}
void set_actors()
{
Actors=新字符串[大小];
对于(int i=0;icout最小修复将为

  • 当前
    参与者的大小
  • 当前
    类型的大小
  • 下次阅读的尺寸
它将是这样的:

class Movie
{
private:
    string* Actors;
    string* genre;
    int Actors_size = 0, genre_size = 0;
    int size = 0;
public:
    Movie()
    {
        Actors = new string[size];
        genre = new string[size];
    }
    void setsize(int x)
    {
        size = x;
    }
    void set_actors()
    {
        Actors = new string[size];
        for (int i = 0; i < size; i++)
        {
            cout << "ACTOR " << i + 1 << endl;
            getline(cin, Actors[i]);
        }
        Actors_size = size;
    }
    void set_genre()
    {
        genre = new string[size];
        for (int i = 0; i < size; i++)
        {
            cout << "GENRE " << i + 1 << endl;
            getline(cin, genre[i]);
        }
        genre_size = size;
    }
    void display_actors()
    {
        for (int i = 0; i < Actors_size; i++)
        {
            cout << Actors[i] << endl;
        }
    }
    void display_genre()
    {
        for (int i = 0; i < genre_size; i++)
        {
            cout << genre[i] << endl;
        }
    }
    ~Movie()
    {
        delete[]genre;
        delete[]Actors;
    }
};
#include <vector>

class Movie
{
private:
    std::vector<string> Actors;
    std::vector<string> genre;
    // sizes are stored in the vectors, so no external size management is required
    int size = 0;
public:
    Movie()
    {
        // vectors will be implicitly initialized, so no explicit initialization is required
    }
    void setsize(int x)
    {
        size = x;
    }
    void set_actors()
    {
        Actors.resize(size);
        for (int i = 0; i < size; i++)
        {
            cout << "ACTOR " << i + 1 << endl;
            getline(cin, Actors[i]);
        }
    }
    void set_genre()
    {
        genre.resize(size);
        for (int i = 0; i < size; i++)
        {
            cout << "GENRE " << i + 1 << endl;
            getline(cin, genre[i]);
        }
        genre_size = size;
    }
    void display_actors()
    {
        for (size_t i = 0; i < Actors.size(); i++)
        {
            cout << Actors[i] << endl;
        }
    }
    void display_genre()
    {
        for (size_t i = 0; i < genre.size(); i++)
        {
            cout << genre[i] << endl;
        }
    }
    ~Movie()
    {
        // explicit deallocation isn't also required
    }
};

请按要求在此处发布a。否则,几乎不可能正确诊断您的问题。我不确定您预期会发生什么。您将大小设置为2,然后读取2种类型。然后将大小设置为4,读取4个演员,然后显示4个演员,然后再显示4种类型。看到问题了吗?有多少种类型?类型有多大你读了多少元素?是的,你是对的,
类型
大小是2,但是当
演员
大小设置为4,当显示
类型
时,显示大小也设置为4。那么我如何为不同的成员函数设置不同的大小呢?你的
类电影
没有遵循,并且存在指针悬空和double-free。您应该使用而不是手动分配的动态数组来避免内存问题。
#include <vector>

class Movie
{
private:
    std::vector<string> Actors;
    std::vector<string> genre;
    // sizes are stored in the vectors, so no external size management is required
    int size = 0;
public:
    Movie()
    {
        // vectors will be implicitly initialized, so no explicit initialization is required
    }
    void setsize(int x)
    {
        size = x;
    }
    void set_actors()
    {
        Actors.resize(size);
        for (int i = 0; i < size; i++)
        {
            cout << "ACTOR " << i + 1 << endl;
            getline(cin, Actors[i]);
        }
    }
    void set_genre()
    {
        genre.resize(size);
        for (int i = 0; i < size; i++)
        {
            cout << "GENRE " << i + 1 << endl;
            getline(cin, genre[i]);
        }
        genre_size = size;
    }
    void display_actors()
    {
        for (size_t i = 0; i < Actors.size(); i++)
        {
            cout << Actors[i] << endl;
        }
    }
    void display_genre()
    {
        for (size_t i = 0; i < genre.size(); i++)
        {
            cout << genre[i] << endl;
        }
    }
    ~Movie()
    {
        // explicit deallocation isn't also required
    }
};