다차원 배열은 각 차원의 범위를 따로 검사한다
matrix[행][열]에서 행과 열 중 하나라도 범위를 벗어나면
배열 밖 메모리에 접근할 수 있습니다.
행 범위
rows = 3이면 행 인덱스는 0, 1, 2입니다.
열 범위
cols = 4이면 열 인덱스는 0, 1, 2, 3입니다.
int matrix[3][4]의 접근 가능 영역
행/열
0
1
2
3
row 0
[0][0]
[0][1]
[0][2]
[0][3]
row 1
[1][0]
[1][1]
[1][2]
[1][3]
row 2
[2][0]
[2][1]
[2][2]
[2][3]
접근 판정
가능
matrix[2][3]은 마지막 행, 마지막 열입니다.
행 초과
matrix[3][0]은 네 번째 행이지만 행은 0~2뿐입니다.
열 초과
matrix[1][4]은 다섯 번째 열이지만 열은 0~3뿐입니다.
루프
r < rows, c < cols를 각각 분리해 씁니다.
체크 순서
바깥 루프는 행 크기, 안쪽 루프는 열 크기를 기준으로 끝냅니다.
핵심 리스크
C++ 배열은 범위 초과 접근을 자동으로 막아주지 않습니다.