모든 답변 관련이 있지만, 뭔가 같은 delete[][] array;
가 동적으로 할당 된 배열에서 작동 할 수 있다는 기대에 와서 무엇을 설명하려고하고 그것이 불가능 이유 :
int array[ROWS][COLS];
이 에서 허용 구문 정적으로 할당 된 배열은 실제로는 1 차원 배열 int array[ROWS*COLS];
을 생성하는 프로그래머를위한 추상화 일뿐입니다. 그러나 컴파일 과정 (치수 크기가 COLS
및 ROWS
이 표준에 의해 상수 여야 만하는 경우) 컴파일러는 나중에 예를 들어 구문을 사용하여 요소를 나중에 지정하는 데 필요한 치수의 크기를 기억합니다. array[x][y] = 45
. 이 크기로 알려진 컴파일러는 [x][y]
을 간단한 수학을 사용하는 1 차원 배열에 대응하는 인덱스로 대체합니다 : [COLS*x + y]
.
반면에 동일한 다차원 기능 (사실상 표기법)을 원한다면은 동적으로 배열을 할당 할 수 없습니다. 런타임 중에 크기가 결정될 수 있기 때문에 나중에 사용하기 위해 각 추가 치수의 크기를 기억해야하며 배열의 전체 수명 동안 기억해야합니다. 더욱이 배열을 실제로 다차원으로 작업하기 위해 코드에서 [x][y]
형식의 액세스 표기법을 사용하고 컴파일하는 동안 1 차원 표기법으로 바꾸지 않고 나중에 런타임에서 바꾸는 대신 시스템 변경을 구현해야합니다.
은 따라서는 부재 array = new int[ROWS][COLS]
의 는delete[][] array;
대한 필요성을 암시하지 않는다. 이미 언급했듯이 서브 어레이 (추가 차원)가 개별적으로 (new
호출을 사용하여) 할당되기 때문에 귀하의 "다차원"배열을 삭제하는 데 귀하의 예제에서 사용할 수 없으므로 맨 위에는 독립적입니다 배열 (array_2D
)이 들어 있으며 한 번에 모두 삭제할 수 없습니다.
아니요, 톱니 모양 배열을 삭제하려고하면 메모리 누수가 발생합니다. –