Ошибка выполнения - стек вокруг переменной 'arr' поврежден - PullRequest
0 голосов
/ 26 марта 2019

Программа предназначена для печати всех введенных целых чисел, которые были сохранены в массиве.Он работает нормально и печатает правильно, за исключением того, что программа завершается с ошибкой во время выполнения.

Я попытался ничего не вводить, и на самом деле он работает нормально и завершает работу.

// 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", &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. %i\n", i + 1, arr[i]);
    }
    system("pause");
}

Если я введу 7, 16, 45 Это должно распечатать

  1. 7
  2. 16
  3. 45

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

1 Ответ

0 голосов
/ 27 марта 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...