포스트

10950번. A+B - 3 - C++

10950번. A+B - 3 - C++

문제 링크

A+B - 3

코드

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 라이센스를 따릅니다.