结构崩溃
Structures crashing
我有一个关于结构的问题,因为我正在编写一些代码,并且在我添加结构后程序总是崩溃,所以我隔离了其中的一小部分,我发现结构STUDENT是它的原因。
当我在主程序中声明学生 [MAX] 数组时,程序崩溃了,我不知道为什么,该程序仅在我运行时运行
1.将学生中的科目2更改为非数组。但是,我确实需要存储多个属于学生的主题
2.在主不数组中声明学生。我需要一个数组,因为我必须存储可能大量的学生。
我的声明可能有问题吗?我恳请一些帮助,提前谢谢你。
#include<iostream>
using namespace std;
const int MAX = 100;
enum Grade {HDist, Dist, Credit, Pass, Fail};
struct assessment_Task
{
char Title_Name[MAX];
int Weight;
int Mark;
double A_Mark;
};
struct SUBJECT
{
char subject_Code[MAX];
char subject_Title[MAX];
int No_Assess_Task;
assessment_Task AT [MAX];
int finalMark;
Grade grade;
};
struct STUDENT
{
char Name[MAX];
int ID;
char Subjects_Taken[2][50];
SUBJECT subjects2 [MAX];
};
int main()
{
STUDENT students[MAX];
}
正如 John3136 所回答的那样,您可能会炸毁导致崩溃的堆栈。
我相信你不能很好地利用每个数组中的那么多元素,而且由于你使用的是C++,我建议使用 STL 容器来帮助你更好地管理内存。
首先,将所有char[]
数组替换为 std::string
。除了内存管理之外,它还具有许多方便的功能。即使你真的需要一个 C 风格的字符串,你也可以调用 str.c_str()
来拥有一个。
然后,将所有这些数组替换为 std::vector
。这是C++中众所周知的动态数组容器。它使用动态内存分配来排列数组,并且不会像当前代码那样炸毁堆栈。
根据 32 位整数进行一些粗略计算,没有填充等 - 基本上是一些简单的假设
- assessment_Task约为 112 字节
- 主题约为 11412 字节
- 学生大约 1141404 字节(超过 1 meg(
- 因此,您的 100 名学生超过 100 meg
所以这是你试图放在堆栈上的 100 Meg 以上。根据操作系统的不同,您的堆栈大小可能高达 8 meg 左右(无需特殊的编译器选项来设置它(。要确认,请尝试将学生数组设置为较小的大小(例如 1(
基本上,您需要减小MAX或对不同的零件使用不同的MAX来减小尺寸。显然,最好的解决方案是使用向量或类似物并动态分配结构。
有关堆栈大小的详细信息,请参阅 Linux 中进程的堆栈大小是否有限制和程序的最大堆栈大小 C/C++。
- 为什么我的结构在包含字符串时崩溃?
- 调用 lambda 的结构/类成员时程序崩溃并"bad_function_call"
- size_t结构非数组成员崩溃的强制转换
- 结构崩溃
- 当通过结构中的指针引用COM_PTR的向量时,向量大小未知时崩溃
- 使用 std::atomic 实现无锁结构,Dtor 崩溃
- 当输入到结构点中的双指针数组时,程序崩溃
- 代码导致数据结构操作崩溃
- 将元素添加到现有结构会使函数在分段错误时崩溃
- 程序在删除结构中的指针数组时崩溃
- 指向结构崩溃的C++链表指针
- 将包含指向该类型队列的指针的结构推送到队列上时发生运行时崩溃
- 为结构字段赋值时程序崩溃
- 创建结构的二维数组会导致崩溃
- 从结构访问数组会使程序崩溃
- 为什么在结构中放入字符串会导致崩溃
- 访问2D结构时程序崩溃
- 控制台中的新结构崩溃,原因
- 当结构具有默认构造函数时,为什么我的C++程序在发布模式下崩溃
- 访问特定结构成员时程序崩溃