본문 바로가기
프로그래밍/C++

C++ ] 이중 포인터와 포인터 배열의 차이

by eteo 2022. 6. 28.

 

 

 

이중 포인터

#define _CRT_SECURE_NO_WARNINGS

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int main() {


	int** pptr;

	pptr = new int* [4];

	pptr[0] = new int[4];
	pptr[1] = new int[2];
	pptr[2] = new int[5];
	pptr[3] = new int;

	delete[] pptr[0];
	delete[] pptr[1];
	delete[] pptr[2];
	delete pptr[3];

	delete[] pptr;

	
	_CrtDumpMemoryLeaks();
	return 0;
}

 

포인터와 배열은 서로 호환적이다. 그래서 이중 포인터를 이차원 배열로 본다면 행과 열을 가변적으로 둘 수 있는 이차원 배열처럼 쓸 수 있다. 다만 포인터 이기에 4byte 공간만을 차지하며 실제 사용할 때는 동적할당을 통해 사용한다.

 

위의 예제처럼 이중포인터는 이중포인터 자체에 한번, 인덱스마다 한번해서, 할당도 해제도 두번에 걸쳐한다.

 

 

 

 포인터 배열

#define _CRT_SECURE_NO_WARNINGS

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int main() {

	int* ptr[3];

	ptr[0] = new int[7];
	ptr[1] = new int;
	ptr[2] = new int[6];

	delete[] ptr[0];
	delete ptr[1];
	delete[] ptr[2];

	_CrtDumpMemoryLeaks();
	return 0;
}

 

반면 포인터 배열은 행이 고정된 이차원 배열처럼 사용할 수 있다, 열은 가변적으로 할당 가능하다. 이와 반대개념인 배열 포인터라는 것도 있는데 잘 사용하지는 않는다.

 

위의 이중포인터와 다른 점은 int* ptr[3] 은 정적메모리에 올라간 거라서 각 인덱스에 동적할당 해준것만 해제하면 된다.