该程序旨在打印存储在数组中的所有输入整数。它可以正常运行并可以正常打印,只是该程序在运行时失败后结束。
我尝试不输入任何内容,但实际上可以正常工作并退出。
// 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 它应该打印出来
它会执行此操作,除非是时候终止程序了 “运行时检查失败#2-变量'arr'周围的堆栈已损坏。”
答案 0 :(得分:0)
counter
高于1时,该代码具有未定义的行为,因为它正在访问数组arr[]
的末尾
这至少导致堆栈损坏。
因此,当程序退出时,它试图访问其调用方时正在访问损坏的堆栈。
由于未定义的行为,任何事情都可能发生。就您而言,发生段故障事件