运行时错误-变量'arr'周围的堆栈已损坏

时间:2019-03-26 18:34:36

标签: c arrays stack

该程序旨在打印存储在数组中的所有输入整数。它可以正常运行并可以正常打印,只是该程序在运行时失败后结束。

我尝试不输入任何内容,但实际上可以正常工作并退出。

// 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 :(得分:0)

counter高于1时,该代码具有未定义的行为,因为它正在访问数组arr[]的末尾

这至少导致堆栈损坏。

因此,当程序退出时,它试图访问其调用方时正在访问损坏的堆栈。

由于未定义的行为,任何事情都可能发生。就您而言,发生段故障事件