Пользователь введет в качестве входных данных тройки, где первое число равно 0, второе число равно числу случаев заболевания определенного возраста (третье число) ИЛИ первое число равно 1, второе и третье числа соответствуют крайним возрастам интервал. Я должен связать «количество случаев» с «возрастом» и иметь возможность редактировать это количество случаев, у него есть возможность получать больше случаев для возраста, указанного ранее (первое число: 0). Кроме того, он даст числа X и Y, так что мне нужно напечатать количество случаев, связанных с возрастами между X и Y (первое число: 1). Я использую язык C.
Я попробовал этот код
#include <stdio.h>
#include <stdlib.h>
int l[3], *list, n = 5;
void add(int X, int Y){
while (Y < n){
n = n * 2;
list = realloc(list, n * sizeof(int));
}
list[Y] += X;
}
void consult(int X, int Y){
int print = 0;
for (int k = X; k <= Y; ++k){
print += list[k];
}
printf("%d\n", print);
}
int main() {
int P;
scanf("%d", &P);
list = (int*)calloc(n, sizeof(int));
for (int i = 0; i < P; ++i){
for (int j = 0; j < 3; ++j){
scanf("%d", &l[j]);
}
if (l[0] == 0){
add(l[1],l[2]);
} else {
consult(l[1],l[2]);
}
}
return 0;
}
Для ввода:
20
0 194 9
1 7 41
0 102 38
1 30 43
0 22 49
1 34 56
1 15 20
1 34 57
1 34 51
0 128 39
0 97 57
0 114 25
0 10 82
0 127 35
1 66 164
0 60 85
0 155 48
1 60 186
1 10 384
0 166 950
он работает, возвращая:
194
102
124
0
124
124
10
70
815
[Program exited with exit code 0]
, но для
40
0 151 25
0 5 3
0 99 1
0 109 14
0 115 15
0 110 1
0 191 2
0 94 9
1 11 13
1 25 31
1 1 33
1 14 26
0 49 31
1 28 33
1 18 34
1 16 23
1 28 38
1 13 26
1 2 5
1 17 29
0 132 8
1 21 24
0 137 0
1 0 13
1 8 26
1 12 20
0 22 63
1 5 8
1 24 70
1 51 61
1 36 40
0 164 42
1 55 70
0 134 112
0 71 105
0 101 7
0 17 67
1 56 252
0 172 363
0 18 188
возвращается, что "превышен максимальный размер стека или памяти или, возможно, недопустимый указатель (код 139)".
Как это исправить проблема в моем коде?
Замечание: это обязательство запустить вектор с размером 5 и, если его недостаточно, мне нужно дублировать предыдущий объем памяти.