c - 什么是分段错误
问题描述
从 1 索引的零数组和操作列表开始,为每个操作添加一个值到两个给定索引之间的每个数组元素,包括两个给定索引。执行完所有操作后,返回数组中的最大值。
我的代码是:
#include <assert.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,b;
scanf("%d",&n);
scanf("%d",&b);
int arr[3][b];
for(int i=0;i<b;i++)
{
for(int j=0;j<3;j++)
{
scanf("%d",&arr[i][j]);
}
}
int man[n];
for(int i=0;i<n;i++)
man[i]=0;
int start,end,change;
for(int i=0;i<b;i++)
{
start=arr[i][0]-1;
end=arr[i][1]-1;
change=arr[i][2];
for(int j=start;j<=end;j++)
{
man[j]=man[j]+change;
//printf("%d",change);
}
}
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(man[j]<man[j+1])
{
int temp=man[j+1];
man[j+1]=man[j];
man[j]=temp;
}
printf("%d",man[0]);
}
输入之一是
40 30
29 40 787
9 26 219
21 31 214
8 22 719
15 23 102
11 24 83
14 22 321
5 22 300
11 30 832
5 25 29
16 24 577
3 10 905
15 22 335
29 35 254
9 20 20
33 34 351
30 38 564
11 31 969
3 32 11
29 35 267
4 24 531
1 38 892
12 18 825
25 32 99
3 39 107
12 37 131
3 26 640
8 39 483
8 11 194
12 37 502
当 n 和 b 的值较低时,我的代码将被执行,但当值较高时,它会显示分段错误。
谁能帮我?
解决方案
至少这个问题:错误的数组尺寸。
// int arr[3][b];
int arr[b][3];
for(int i=0;i<b;i++) {
for(int j=0;j<3;j++) {
scanf("%d",&arr[i][j]);
}
}
推荐阅读
- python - Django Teamplate 选项卡不显示
- react-native - 错误:已为此容器注册了另一个导航器。您可能在单个“NavigationContainer”或“Screen”下有多个导航器
- asp.net-core - Serilog dotnet core function app 和 sql sink
- javascript - WordPress:JS 已加载,但其中的功能不起作用
- linux - 如何在 kali linux 上安装 pip2 和 pip3?
- excel - Azure 逻辑应用获取目标工作表行值
- spring - 好奇docker-compose和dockerfile的使用
- image - 将 html 转换为 odt 或 docx 时嵌入图像
- sql - Oracle - 如何处理函数错误并返回 null
- node.js - Node.js 和 Oracle DB 选择查询在行中获取空数组