#c #arrays #stack
#c #массивы #стек
Вопрос:
Программа стремится напечатать все введенные целые числа, которые были сохранены в массиве. Он работает нормально и печатается правильно, за исключением того, что программа завершается сбоем во время выполнения.
Я пробовал ничего не вводить, и на самом деле все работает нормально и завершается.
// Alex Ruiztagle
// 3/26/2019
// Script to do operations on user entered numbers. Also I really hate primitive types. I spend more time figuring out the right one to use than I do writing the logic.
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr[] = {0};
int inpt;
int counter = 0;
int stat = 0;
printf("Enter some numbers n");
while (stat == 0) {
scanf_s("%i", amp;inpt);
if (inpt == -999 || counter == 50) {
stat = 1;
}
else {
arr[counter] = inpt;
counter ;
}
}
printf("nYou entered n");
for (int i = 0; i < counter; i ) {
printf("%i. %in", i 1, arr[i]);
}
system("pause");
}
Если я введу 7, 16, 45
Он должен распечатать
- 7
- 16
- 45
Это происходит за исключением случаев, когда пришло время завершить программу, она заканчивается «Ошибка проверки во время выполнения # 2 — Поврежден стек вокруг переменной ‘arr'».
Комментарии:
1. Какого размера вы ожидаете
arr
быть?
Ответ №1:
как только counter
значение превышает 1, код начинает вести себя неопределенно, поскольку он обращается за пределы конца массива arr[]
Это приводит (как минимум) к повреждению стека.
Поэтому, когда программа завершает работу, она обращается к этому поврежденному стеку, поскольку пытается вернуться к своему ‘вызывающему.
Из-за неопределенного поведения может произойти что угодно. В вашем случае происходит событие ошибки seg