2차원 배열 동적할당 예제

다음 예제에서는 `r`을 행 수로, `c`를 열 수로 간주하고 2차원 배열에 대해 동적으로 할당된 메모리를 해제하려면 r = 3, c = 4 및 다음 값이 있는 2D 배열을 만들었습니다. s는 먼저 각 행에 할당됩니다. 그것은 루프에서 수행 할 수 있습니다 : 3) 포인터에 대한 포인터를 사용하여 우리는 또한 이중 포인터를 사용하여 동적으로 포인터의 배열을 만들 수 있습니다. 배열 포인터가 동적으로 할당되면 메모리를 동적으로 할당하고 메서드 2와 같은 모든 행에 대해 할당 할 수 있습니다. 이 작업을 완료하면 1차원 사례와 마찬가지로 배열과 같은 구문을 사용하여 시뮬레이션된 다차원 배열에 액세스할 수 있습니다. 우리가 예를 들어 작성하는 경우, 우리는 위의 예에서 배열 arr에 할당 된 메모리를 확보 할 수 있습니다 : 동적으로 2 차원 배열에 대한 메모리를 할당하려면 먼저 포인터에 대한 포인터를 만들어야합니다 : 컴파일되지 않고 왜 무엇을 확실히 이해할 수 없습니다. 정확히 일어나고 있다. 배열선언구문은 혼란스럽다. 그것은 “`int (*)][5]`에서 `int *[5]`로 은밀하게 할 수 없다”고 말합니다. int (*)[5]는 int에 대한 5 개의 포인터 배열이지만 int *[5]는 무엇입니까? 그런 다음 포인터를 배열에 저장할 포인터 배열에 대한 메모리를 할당해야합니다 : 이제 루프를 사용하여 2 차원 배열의 각 행에 대한 메모리를 할당합니다: 5 ints 배열에 대한 포인터? 당신은 뿐만 아니라 할당의 rhs에 선입견을 철자 하시기 바랍니다 수 있습니다., 그건 내가 생각 하는 가장 혼란 스러운 부분. 나는 다음과 같이 읽었다 : 두 번째 대괄호 [5]는 요소가 표현식의 나머지 부분인 새로운 int[10]인 5 개의 요소의 정적 배열을 선언합니다. 이 모든 것을 합치면 위의 코드가 크기 5×3 배열에 메모리를 할당하는 것으로 rhs를 해석합니다.

1D 배열과 같은 C 언어에서는 런타임시 동적 메모리 할당을 사용하여 2D 배열을 만들 수도 있습니다. 아래에서 는 포인터를 사용하여 2D 배열을 만드는 몇 가지 일반적인 단계를 나열합니다. 힙은 동적 메모리 할당에 사용되는 컴퓨터 메모리 영역입니다. 동적 할당을 사용하면 생성된 모든 변수가 힙에 저장되고 힙 메모리가 자동으로 관리되지 않습니다. 동적 메모리 할당을 사용하는 경우 스택에 있는 포인터는 힙에 할당된 메모리 영역을 가리킵니다.