일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- TypeScript
- VIM
- git
- 동적 계획법
- Javascript
- 프로그래머스
- vscode
- BFS
- java
- Algorithm
- 리트코드
- network
- react
- 안드로이드
- Database
- LeetCode
- DP
- Graph
- 그레이들
- 알고리즘
- db
- 다이나믹 프로그래밍
- frontend
- Data Structure
- CS
- 자바
- Redux
- DFS
- Python
- Today
- Total
늘 겸손하게
이차원 배열 동적할당 ( C / C++ ) 본문
이차원 배열을 동적 할당해보자
동적 할당을 위해서 malloc이 필요하다.
#include <stdlib.h> 혹은 #include <iostream>을 추가하여 malloc을 사용 가능하도록 한다.
1. 배열을 저장할 배열을 생성
1
2
3
4
5
6
7
|
int** arr;
int a, b;
cin >> a >> b;
arr = (int**)malloc(sizeof(int*) * (a));
|
cs |
a, b는 사용자로부터 입력받는 숫자로 a는 배열의 개수, b는 배열의 원소 개수로 가정한다.
더블 포인터 arr를 선언하고 입력받은 정수 값 a를 이용하여 a개의 배열 주소 값들을 저장할 배열을
malloc으로 이용하여 생성하고 생성한 배열의 주소 값을 포인터 arr에 할당한다.
( sizeof(int*) * a ) 값만큼의 크기를 생성한 이유는 a개의 배열 주소 값만 저장하면 되기 때문.
(int**)로 캐스팅하여 더블 포인터임을 알린다.
2. 원소의 개수가 b개인 배열을 a개 생성하고 생성한 배열의 주소 값을 arr의 원소로 저장
1
2
3
|
for (int i = 0; i < a; i++)
arr[i] = (int*)malloc(sizeof(int) * b);
|
cs |
arr 배열의 각 원소 값은 생성한 배열의 주소 값이다.
생성한 이차원 배열은 자유롭게 사용 가능하고
행렬 데이터를 저장할 때 매우 유용하다
3. 할당한 데이터의 할당 해제
동적 할당한 데이터는 할당 해제를 해주어야 메모리 누수가 발생하지 않는다.
메모리 누수란 더 이상 사용하지 않는 데이터를 프로그램이 계속 점유하는 것을 말한다.
메모리 누수가 조금 발생하는 것이 큰 문제는 아니지만 메모리 누수가 누적되다가
누수된 메모리량이 너무 많아지면 버그가 생기기는 원인이 되거나 심한 경우에는 프로그램이
더 이상 사용 가능한 메모리가 부족해져 결국 작동이 중지되는(죽어버리는) 일이 발생할 수도 있다.
동적 할당한 데이터의 할당 해제는 free 함수를 이용한다.
arr 배열의 각 원소 값으로 저장된 배열의 주소 값들을 할당 해제 함수인 free 의 인자로 주어
할당해제 작업을 수행
더블 포인터 arr에 저장된 배열 할당 해제
'Programming > C & C++' 카테고리의 다른 글
ios_base::sync_with_stdio(false); cin.tie(NULL); 읽기, 쓰기 속도 증가 (0) | 2021.08.10 |
---|---|
Swap macro(스왑 매크로)/C,C++ (0) | 2021.01.30 |