如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
How to fix "segmentation fault (core dumped)" error when accessing a string variable within a struct within a dynamic array
我正在编写一个简单的游戏,我正在跟踪用户在程序运行时在会话中玩的每个游戏的统计数据。为此,我创建了一个名为"game"的结构,其中包含所玩游戏的统计信息(游戏#,谁赢了,谁输了,回合#,以及他们是否选择辞职(。然后,我制作了这些结构的动态数组,每次玩的游戏数量增加一个时,它就会为新结构再分配一段内存。然后通过运行一个 for 循环输出所有统计信息,该循环遍历并输出该会话中每场比赛的统计信息。当输出保存游戏编号的 int 变量时,没有问题,但是一旦它到达保存获胜者名称的字符串变量,我就会出现"分段错误(核心转储("错误。
我知道错误消息意味着我正在尝试访问我也无法访问的内存,所以我确保我的动态数组的容量大于索引,这样我就不会超出它的内存位置,甚至在每次游戏后都添加了额外的容量,但错误仍然存在。
我相信这部分是当我尝试访问"winner"字符串时导致错误的原因,只是不确定为什么:
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);
这就是每次玩新游戏时扩展新游戏结构的数组的方式。 索引在每次游戏后上升 1,此代码应确保容量保持相同或大于索引。
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
包含一个名为std::string
的C++类。这是一个具有构造函数和析构函数的类。
malloc()
和realloc
是 C 库函数,它们对任何C++类或如何调用其构造函数或析构函数一无所知。
不能将malloc
、realloc
或free
与C++类一起使用。不是std::string
,或任何其他非 POD C++类。
幸运的是,C++有一个非常有用的类,叫做std::vector
,它将正确管理"动态数组",正确增长和收缩,为其内容分配内存,并正确构造和销毁需要构建或销毁的所有内容。
您的代码重新发明了一个已经发明的轮子,称为std::vector
。它完成显示的代码手动执行的所有操作,包括大小、容量等......你试图复制std::vector
的逻辑,没有任何明显的好处。
完全摆脱所有使用malloc
、realloc
和free
的代码,并将其替换为std::vector
。您可以在C++书中找到有关如何使用std::vector
的更多信息。
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 循环时无法进入:"Segmentation fault"
- OpenGL "Segmentation fault"错误
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 如何修复 C++ 中的'Segmentation fault'错误
- 创建一个简单的类及其变量和函数不断返回" segmentation fault (core dumped)"、C++
- 在 Mac OS 上遇到的"Segmentation fault: 11" [C++]
- 在 Linux 上实施英特尔 MKL 的 DFT 时"Segmentation fault"
- 尝试读取包含 ints 并存储在 int vector 中的文件,但我不断收到错误"Segmentation fault (core dumped)"
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 我正在尝试通过说话传递一些字符串,它会读取它们,但我得到了"segmentation fault"
- 为什么当我更改此代码时会给我"segmentation fault"错误?
- 尝试将文本文件加载到动态分配的 2D 数组中时出现'Segmentation fault'错误
- 将double打印到std::cout会导致Segmentation fault(C++)
- 将指针分配给链接列表节点会引发"Segmentation Fault"
- "Segmentation fault"使用 Cmake 在C++代码中运行 python 函数时
- 无法读取 Ubuntu "Segmentation fault (core dumped)"中的.dat或.bin文件
- 如何修复C++中的"Segmentation fault(core dump)"?