简单运动模拟中的分段错误
Segmentation Fault in simple Sports Simulation
我目前正在制作一个基于文本的快速运动模拟器。到目前为止,我有两个班,团队和球员。我试着在一个团队中制作一系列球员,也就是花名册。(不知道该怎么做)。我试着培养一名球员,然后把他安排在名单的第一位。它编译得很好,但当我运行程序时,我会出现"分段错误",我相信这与我在内存中造成的错误有关。代码可能不是最好的,所以很抱歉,如果我的代码不是最优化的。如果你对我如何解决这个问题有任何建议,请告诉我。谢谢
#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
using namespace std;
class Player {
public:
string playerName;
string playerAge;
string position;
} players;
class Team: public Player {
public:
string name;
Player roster[];
} teams;
void teamCrocovia() {
Team crocovia;
crocovia.name = "ComArch Crocovia";
Player cro1;
crocovia.roster[0] = cro1; // This is the segmentation fault.
}
int main() {
teamCrocovia();
return 0;
}
您不能期望这样:
Player roster[]; // this is a zero-sized array
成为一个可变大小的数组(C++中没有这样的东西),并添加诸如之类的元素
crocovia.roster[0] // out of bounds access
改为使用std::vector
:
std::vector<Player> roster; // in Team
crocovia.roster.push_back(cro1); // add player
此外,我不明白为什么Team
继承自Player
,并且您立即创建具有每个类的复数名称的对象,这些名称甚至都没有使用。
您应该定义数组的大小,例如
Player roster[5];
如果在编写代码时不确定数组的大小,你应该把它申报为
Player *roster;
和其他地方(最好是在类Team的构造函数中)把它做成一个阵列,也许像这个
roster = new Player[k];
,其中k是你想要加入球队的球员数量。
另外,关于这个
class Team: public Player
我不认为这是你想要的。我认为你不想宣布球队是一名球员。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?