C 배열에 꼬리 부분에 여분의 바이트가있을 수 있습니다.C 배열에 꼬리 부분에 여분의 바이트가있는 이유는 무엇입니까?
내 코드
int a = 5;
int test[] = {1,2,3,4};
int b = 5;
test[-1] = 11;
test[4] = 11;
cout << b << endl; // 11
cout << a << endl; // 5
당신은 b
의 값이 test[-1]
의 값을 변경을 통해 변경되는 실행 결과 there
을 볼 수 있습니다. 그러나 test[4]
의 값을 변경하면 a
의 값은 변경되지 않습니다.
++ 6.4.0가, test[4]
의 a
빼기 주소의 주소가 3.8.1 ++ 그 소리에서 8 바이트
의 a
빼기 주소의 주소인지 발견 test[4]
은 4 바이트입니다.
그래서 왜 배열에 꼬리 부분에 바이트가 있는지 궁금합니다.
감사합니다. @Peter A.Schneider가 질문을 설명합니다. 분명히 UB이지만 실험 코드 일뿐입니다. 실용적인 코드에 대한 논의가 아닙니다.
일반적으로 런타임 스택의 변수는 서로 가깝습니다. b
은 test에 가깝지만 'a'가 'test + 3'에 근접하지 않은 이유는 무엇입니까? 그것이 바로 문제의 핵심입니다.
'테스트 [-1] 11 =;'- -1 인덱스 –
을 위해 당신은 _undefined 호출 할 수 없습니다.? behavior_ 및 특정 하나를 기대하십시오 – user0042
코드에 UB가 있습니다 –