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;i cout最小修复将为
- 当前
参与者的大小
- 当前
类型的大小
- 下次阅读的尺寸
它将是这样的:
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
}
};