#include "iostream"
using namespace std;
int main()
{
int arr[10]
int i;
for(i=0; i<10; i++)
{
cin >> arr[i-1];
}
return 0;
}
이 코드 실항하면 for문 처음 돌때 cin >> arr[-1] 되서 arr[-1]은 잘못된 접근이니까 바로 에러 날줄 알았거든요
근데 실행하면
---------------
1
[에러]
---------------
이게 아니라
---------------
1
2
3
4
5
6
7
8
9
10
[에러]
---------------
이렇게 for문 10번 다 돌고 에러가 나요.
왜이런건가요??
스택메모리에서 건드리지말아야 할것을 건드린거같다
메인함수 실행중에는 문제를 안일으키는데 return 0; 하고나서 에러가 났을듯?
arr[-1] 이렇게 어딘지도 모르는 메모리 건드리면 무조건 에러 나는게 아니에요??
경험상 인덱스가 터무니없으면 바로 에러 날텐데 -1정도는 바로 에러안뜸
되서->돼서 (되어 = 돼임)[리듬 맞춤법 봇♬]
함수를 호출할때 함수호출에 필요한 정보를 스택에 넣는데, 이 정보들을 스택프레임이라고 부름. 스택을 모르더라도 그냥 대충말하면 지역변수나 매개변수, 그리고 호출이 끝나고 함수의 호출원으로 돌아가기위한 정보등이 저장되는데, 여기서 쓰는 스택자체가 배열처럼 선형메모리 구조를 가진다. 그러니까 arr[-1]; 이라고 하면 실제로 arr-1 라는 번지, 즉 한칸뒤에 있는놈을 건들이는건데 이게 스택프레임의 필수데이터를 건드리니까 main함수가 끝나고 main함수를 정리하는데 필요한 정보가 없으니 에러가 뜨는것