자바/C++ 개발자는 여기에 있습니다. C를 배우려고하지만 배열에 대한 메모리 할당과 혼동 스럽습니다.C - 배열 허용 범위를 벗어 납니까?
여기 무슨 일입니까?
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main()
{
int az[3];
az[2] = 66;
az[8] = 5214;
printf("%d\n", az[8]);
system("pause");
return 0;
}
출력
5214
어떻게 그 수 있는가? Out of Bounds 예외 또는 프로그램 충돌이 발생하지 않는 이유는 무엇입니까? 나는 이것을 무한히 할 수 있을까? 이 경우 배열의 길이는 얼마입니까? 배열로 인해 값이 범위를 벗어날 수 있다면 malloc
을 통해 메모리를 할당하는 것이 무엇입니까? 이것은 나에게 제로를 의미합니다.
C는 범위를 벗어난 것에 대해 불평하지 않습니다. 그처럼 간단합니다. – icbytes
동작은 '정의되지 않음'입니다. 정확히 의미합니다. 충돌 할 수 있습니다. 쓰레기를 출력 할 수 있습니다. sigsegv 수 있습니다. minecraft의 복사본을 시작할 수 있습니다. C/C++에는 가드 레일이 없습니다. – evaitl
참고로 C++에서 동일한 작업을 수행 할 수 있습니다. 그것은 C 또는 malloc에 고유하지 않습니다. – qexyn