ILSSLM 2023-07-04 17:06 采纳率: 50%
浏览 39
已结题

c++数组段错误产生的原因?

在洛谷刷题遇到如下问题:
在下列代码中,当定义类数组为stu[n+5]时,得到16分,提示段错误,错误提示信息如下:

Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.

当stu[n+10]时,得到32分,同样提示段错误;
增加到stu[n+100]时才顺利通过了,这是为什么呢?
源码如下:

#include <iostream>
using namespace std;
class Student{
    public:
        string name;
        int year;
        int month;
        int day;
        int statis;
};
int main(){
    int n;
    Student stu[n+100];
    cin >> n;
    for(int i = 0; i < n; i ++){
        cin >> stu[i].name >> stu[i].year >> stu[i].month >> stu[i].day;
        stu[i].statis = stu[i].year*10000 + stu[i].month*100 + stu[i].day;
    }
    for(int i = 0; i < n-1; i ++){
        for(int j = n-1; j > i; j --){
            if(stu[j-1].statis >= stu[j].statis){
                swap(stu[j], stu[j-1]);
            }
        }
    }
    for(int i = 0; i < n; i ++){
        cout << stu[i].name << endl;
    }
}
  • 写回答

3条回答 默认 最新

  • a5156520 2023-07-04 17:12
    关注

    原第14行放到第13行之前。使用n的值定义结构数组,需要在获取n的值之后。

    如果是放在获取n的值之前,n的值是内存位置的随机值,可能是0,也可能是别的值,然后定义的数组大小可能小于需要测试的大小,就会报错了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月12日
  • 已采纳回答 7月4日
  • 创建了问题 7月4日

悬赏问题

  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)