index bounds

다차원 배열은 각 차원의 범위를 따로 검사한다

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++ 배열은 범위 초과 접근을 자동으로 막아주지 않습니다.