10950번. A+B - 3 - C++
10950번. A+B - 3 - C++
문제 링크
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main() {
int t;
scanf("%d", &t);
int* arr = new int[t * 2];
for (int i = 0; i < t; i++) {
scanf("%d %d", &arr[2 * i], &arr[2 * i + 1]);
}
for (int i = 0; i < t; i++) {
printf("%d\n", arr[2 * i] + arr[2 * i + 1]);
}
delete [] arr;
arr = NULL;
return 0;
}
설명
동적 배열 할당을 사용했다
동적 배열 할당
원래 c++은 배열을 선언할 때 크기를 미리 정해야 하지만, new [] 연산자로 변수를 받고 배열을 선언하는 방식이다
이때 사용이 끝난 배열과 포인터는 메모리에서 없애주어야 한다
delete []와 NULL을 활용해주면 된다
delete와 delete [] 차이
new []로 배열을 선언하였다면 메모리에서 배열을 없앨 때 delete []를 써주어야 한다
delete와 헷갈리지 말자
이유
내부적으로 얘기하자면 new[] 를 사용할 경우 할당하는 메모리 앞에 4바이트 메모리를 더 할당하여 배열의 Size를 저장해놓는다. 이 메모리를 해제할 때 delete[]를 사용하면 이 값(배열의 Size)을 확인하지만 delete를 사용하면 확인하지 않는다. 따라서 delete[]를 사용해야 Array가 Class Type Array인 경우 각각의 Entry에 대해 배열의 Size만큼의 생성자/소멸자를 호출해 줄 수 있다.
요약
new []는 할당하는 메모리 앞에 4바이트 메모리를 더 할당하여 사이즈를 저장한다delete []는 사이즈를 보고 배열의 사이즈만큼 할당 해제한다
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.