访问动态数组中的结构中的字符串变量时,如何解决“分段错误(核心转储)”错误

ly

我正在编写一个简单的游戏,并且在程序运行时跟踪他们在会话中玩的每个游戏的用户统计信息。为此,我制作了一个名为“游戏”的结构,该结构保存了玩过的游戏的统计信息(游戏编号,谁赢了,谁输了,转数为#,以及他们是否选择辞职)。然后,我对这些结构进行了动态排列,每次玩游戏的数量增加一时,该结构就会为新结构分配更多的内存部分。然后,通过运行for循环来输出所有统计信息,该for循环进行并输出该会话中玩过的每个游戏的统计信息。当输出保存游戏号码的int变量时,没有问题,但是一旦到达保存获胜者姓名的字符串变量,我将收到“细分错误(核心弃权)”错误。

我理解该错误消息表示我也尝试访问我也无权访问的内存,因此我确保动态数组的容量大于索引,因此我不会超出其内存位置,甚至在之后没有添加额外的容量每个游戏,但错误仍然存​​在。

我相信这部分是什么导致我尝试访问“优胜者”字符串时的错误,只是不确定原因:

for(int i = 0; i <= index; i++){
         cout<<"Game "<<games[i].num<<"\t|\t"<<games[i].winner<<end;
    }

这就是我制作动态数组的方式:

int index = 0;
int capacity = 1;
game *games;
games = (game *)malloc(sizeof(game)*capacity);

这就是我每次玩新游戏时如何为新游戏结构扩展数组的方式。每次游戏结束后索引会增加一个,此代码应确保容量保持等于或大于索引的大小。

if (index>=capacity) {
        capacity+=1;
        games = (game *) realloc(games, sizeof(game)*capacity);
}

这是结构定义

struct game
{
    int num;
    string winner;

};

对于任何不良的格式,我们深表歉意,我是C ++的新手,我也是该网站的新手。请很好:)

山姆·瓦尔沙夫奇克
games = (game *)malloc(sizeof(game)*capacity);

games = (game *) realloc(games, sizeof(game)*capacity);

game包含一个名为的C ++类std::string这是带有构造函数和析构函数的类。

malloc()并且realloc是C库函数,它对任何C ++类或如何调用其构造函数或析构函数绝对一无所知。

您不能将mallocreallocfree与C ++类一起使用。不是std::string,或其他任何非POD C ++类。

幸运的是,C ++有一个非常有用的类std::vector该类将正确管理“动态数组”,正确地增长和收缩以及为其内容分配内存,并正确地构造和破坏所有需要构造或破坏的东西。

您的代码重新发明了一个已经发明的轮子,称为std::vector它会执行所显示的代码在大小,容量等方面手动执行的所有操作。您试图复制std::vector的逻辑,没有任何明显的好处。

彻底摆脱所有的代码,使用mallocreallocfree,并将其替换std::vector您将std::vector在C ++书籍中找到有关如何使用的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

解决链接列表中的分段错误(核心转储)

如何在C中的CPU调度仿真程序中解决分段错误(核心转储)错误?

具有动态数组的C程序中的分段错误(核心转储)错误

使用结构中的指针(成员)在动态内存分配中出现分段错误(核心转储)

如何修复C中的分段错误(核心转储)错误

C 中的分段错误(核心转储) - 使用 PTHREADS 时

使用 fscanf 时 C 中的分段错误(核心转储)

C 中的分段错误(核心转储)

如何修复装配中的“分段错误(核心转储)”?

动态字符串数组中的分段错误

如何解决“分段错误(核心已转储)”

如何解决“分段错误(核心已转储)”

我该如何解决分段错误(核心已转储)?

使用动态2D数组时的C ++分段错误(核心转储)

分段错误:C中的核心转储错误

错误:分段错误,核心转储,在 c 编程中

分段错误:核心转储 C++ 向量对字符串:

将字符串分配给 C 中的结构变量时出现分段错误

如何摆脱分段错误(核心转储)

访问由C中的函数修改的字符串数组时出现分段错误

在 C 程序中接收分段错误(核心转储)

递归算法中的分段错误(核心转储)

C程序中的分段错误(核心转储)以制作直方图

C 代码中的分段错误(核心转储)

数组初始化中C中的分段错误(核心转储)

字符串,打印,{分段错误(核心已转储)}

无法解决错误:分段错误(核心转储)

更改字符串字符时出现分段错误(核心已转储)

Python如何解决字符串中的Unicode错误