Ошибка времени выполнения — поврежден стек вокруг переменной ‘arr’

#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
Он должен распечатать

  1. 7
  2. 16
  3. 45

Это происходит за исключением случаев, когда пришло время завершить программу, она заканчивается «Ошибка проверки во время выполнения # 2 — Поврежден стек вокруг переменной ‘arr'».

Комментарии:

1. Какого размера вы ожидаете arr быть?

Ответ №1:

как только counter значение превышает 1, код начинает вести себя неопределенно, поскольку он обращается за пределы конца массива arr[]

Это приводит (как минимум) к повреждению стека.

Поэтому, когда программа завершает работу, она обращается к этому поврежденному стеку, поскольку пытается вернуться к своему ‘вызывающему.

Из-за неопределенного поведения может произойти что угодно. В вашем случае происходит событие ошибки seg