산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

동적 배열이란?

동적 배열은 일반 배열과 매우 유사하지만, 프로그램 런타임 중에 크기를 수정할 수 있습니다. 동적 배열 요소는 연속된 메모리 블록을 차지합니다.

일반 배열은 생성 후 크기를 변경할 수 없습니다. 그러나 동적 배열은 다릅니다. 동적 배열은 필요할 때 일정 팩터만큼 메모리 크기를 늘릴 수 있습니다.

배열 생성 시 미리 정해진 양의 메모리가 할당됩니다. 동적 배열의 경우는 필요할 때 메모리 크기를 늘립니다.

이 C++ 튜토리얼에서 배울 내용:

동적 배열 성능에 영향을 주는 요인들

배열의 초기 크기와 성장 팩터가 성능을 결정합니다. 다음 사항에 유의하세요:

  1. 배열 크기가 작고 성장 팩터가 작으면 메모리 재할당이 빈번해져 성능 저하
  2. 배열 크기가 크고 성장 팩터가 크면 미사용 메모리 청크가 커져 리사이즈 연산이 더 오래 걸릴 수 있어 성능 저하

new 키워드

C++에서 new 키워드로 동적 배열을 생성할 수 있습니다. 할당할 항목 수는 대괄호 쌍 안에 지정합니다. 타입 이름이 앞에 와야 합니다. 요청된 항목 수가 할당됩니다.

문법:

new 키워드는 다음 문법을 가집니다:

pointer_variable = new data_type; 

키워드는 첫 번째 항목에 대한 포인터를 반환합니다. 동적 배열 생성 후 delete 키워드로 삭제할 수 있습니다.

예제 1:

#include<iostream>
using namespace std;
int main() {
    int x, n;
    cout << "Enter the number of items:" << "\n";
    cin >>n;
    int *arr = new int(n);
    cout << "Enter " << n << " items" << endl;
    for (x = 0; x < n; x++) {
        cin >> arr[x];
    }
    cout << "You entered: ";
    for (x = 0; x < n; x++) {
        cout << arr[x] << " ";
    }
    return 0;
} 

출력:

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

코드 스크린샷:

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

코드 설명:

  1. iostream 헤더 포함하여 함수 사용
  2. std 네임스페이스 포함하여 클래스 직접 사용
  3. main() 함수 호출, 프로그램 로직은 본문 내에 작성
  4. 정수 변수 x, n 선언
  5. 콘솔에 프롬프트 출력하여 변수 n 값 입력 요청
  6. 키보드에서 사용자 입력 읽어 변수 n에 할당
  7. 총 n개의 정수를 담을 배열 선언하고 포인터 변수 *arr에 할당
  8. 사용자에게 n개 항목 입력 요청 메시지 출력
  9. for 루프로 루프 변수 x 생성하여 사용자 입력 항목 순회
  10. 사용자 입력 요소를 읽어 배열 arr에 저장
  11. for 루프 본문 끝
  12. 콘솔에 텍스트 출력
  13. for 루프로 배열 항목 순회
  14. 배열 arr의 값들을 콘솔에 출력
  15. for 루프 본문 끝
  16. 프로그램 성공 완료 시 값 반환
  17. main() 함수 본문 끝

참고: 위 예제에서 사용자는 런타임에 배열 크기를 임의로 지정할 수 있습니다. 즉, 배열 크기가 런타임에 결정됩니다.

동적 할당 배열 초기화

동적 배열을 0으로 초기화하는 것은 쉽습니다.

문법:

int *array{ new int[length]{} }; 

위 문법에서 length는 배열에 추가할 요소 수입니다. 0으로 초기화해야 하므로 비워둡니다.

초기화 리스트로 동적 배열을 초기화할 수도 있습니다. 이를 보여주는 예제를 만듭시다.

예제 2:

#include <iostream>
using namespace std;
int main(void) {
    int x;
    int *array{ new int[5]{ 10, 7, 15, 3, 11 } };
    cout << "Array elements: " << endl;
    for (x = 0; x < 5; x++) {
        cout << array[x] << endl;
    }
    return 0;
} 

출력:

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

코드 스크린샷:

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

코드 설명:

  1. iostream 헤더 포함
  2. std 네임스페이스 포함
  3. main() 함수 호출
  4. 정수 변수 x 선언
  5. 초기화 리스트로 동적 배열 array 선언. 5개 정수 요소 보유. 배열 길이와 초기화 리스트 사이에 "=" 연산자 사용 안 함에 유의
  6. 콘솔에 텍스트 출력. endl은 줄바꿈을 의미하는 C++ 키워드
  7. for 루프로 배열 요소 순회
  8. 배열 array의 내용 콘솔 출력
  9. for 루프 본문 끝
  10. 프로그램 성공 완료 시 값 반환
  11. main() 함수 본문 끝

배열 크기 조정

동적 배열의 길이는 할당 시 설정됩니다.

그러나 C++은 한 번 할당된 배열을 리사이즈하는 내장 메커니즘이 없습니다.

새 배열을 동적 할당하고 요소를 복사한 뒤 기존 배열을 지우는 방식으로 극복할 수 있습니다.

참고: 이 기법은 오류 발생 가능성이 있으므로 가능한 피하세요.

동적 배열 삭제

동적 배열은 목적이 완료되면 컴퓨터 메모리에서 삭제해야 합니다. delete 문으로 이를 수행할 수 있습니다. 해제된 메모리 공간은 다른 데이터 저장에 재사용됩니다. 동적 배열을 메모리에서 삭제하지 않아도 프로그램 종료 시 자동으로 삭제됩니다.

참고:

동적 배열을 컴퓨터 메모리에서 삭제하려면 delete 대신 delete[]를 사용해야 합니다. []은 CPU에 여러 변수가 아닌 단일 변수를 삭제하도록 지시합니다. 동적 배열 처리 시 delete[] 대신 delete 사용 시 메모리 누수, 데이터 손상, 크래시 등의 문제가 발생할 수 있습니다.

예제 3:

#include<iostream>
using namespace std;
int main() {
    int x, n;
    cout << "How many numbers will you type?" << "\n";
    cin >>n;
    int *arr = new int(n);
    cout << "Enter " << n << " numbers" << endl;
    for (x = 0; x < n; x++) {
        cin >> arr[x];
    }
    cout << "You typed: ";
    for (x = 0; x < n; x++) {
        cout << arr[x] << " ";
    }
    cout << endl;
    delete [] arr;
    return 0;
} 

출력:

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

코드 스크린샷:

C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제

코드 설명:

  1. 프로그램에 iostream 헤더 포함
  2. std 네임스페이스 포함
  3. main() 함수 호출
  4. 정수 타입 변수 x, n 두 개 선언
  5. 콘솔에 텍스트 출력. 사용자가 입력할 숫자 개수 묻기
  6. 키보드에서 사용자 입력 읽기. 입력 값은 변수 n에 할당
  7. 포인터 변수 *arr 선언. 배열 arr은 총 n개 정수 저장용 메모리 예약
  8. 콘솔에 메시지 출력하여 사용자에게 n개 숫자 입력 요청
  9. for 루프와 루프 변수 x 생성하여 사용자 입력 숫자 순회
  10. 사용자 입력 숫자 읽어 배열 arr에 저장
  11. for 루프 본문 끝
  12. 콘솔에 텍스트 출력
  13. for 루프와 루프 변수 x로 배열 arr 내용 순회
  14. 배열 arr의 값들 콘솔 출력
  15. for 루프 본문 끝
  16. 콘솔에 빈 줄 출력
  17. 배열 arr의 메모리 해제
  18. 프로그램 성공 완료 시 값 반환
  19. main() 함수 본문 끝

요약:

C 언어

  1. C# 배열 마스터하기: 선언, 초기화, 조작과 LINQ 연산
  2. C++ 배열을 함수에 전달하는 방법: 실전 가이드
  3. C 언어 동적 메모리 할당: malloc, calloc, realloc, free 마스터하기
  4. C++ 배열 완전 정복: 선언, 초기화, 포인터 기법
  5. C++ 연산자 총정리: 종류, 예제, 샘플 프로그램
  6. C++ switch-case 마스터하기: 문법, 활용법, 실전 예제
  7. C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달
  8. C++ std::list 마스터하기: 문법, 함수, 실전 예제
  9. C++ 구조체 vs 클래스: 핵심 차이, 문법, 최적 사용 사례
  10. 자바 선택 정렬: 단계별 예제와 전체 코드