λμ ν λΉ: Dynamic Memory Allocation
μ°λ¦¬λ κ·Έλμ μ μ ν λΉμ ν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ μμμ΅λλ€.
μ μ ν λΉμ ν΅νλ©΄, μ»΄νμΌμ ν λμ νμν λ©λͺ¨λ¦¬κ° ν λΉλκ³ , μ΄λ νλ‘κ·Έλ¨ μ’ λ£μκΉμ§ λ³λλμ§ μμ΅λλ€.
μλ₯Όλ€μ΄, νλ‘κ·Έλ¨ λ΄λΆμμ μ΄λ ν μ μ xλ₯Ό μ μΈνμλ€λ©΄,
κ·Έ λ³μμ κ°μ λ³ν μ μμΌλ λ³μμκ² ν λΉλ λ©λͺ¨λ¦¬λ λκΉμ§ λ³νμ§ μμ΅λλ€.
κ·Έ ν λΉλ λ©λͺ¨λ¦¬λ sizeof ν¨μλ‘ μ μ μμμ΅λλ€.
κ·Έμ λ°ν΄ λμ ν λΉμ μ»΄νμΌμ ν λκ° μλ, λ°νμ λμ€μ λ©λͺ¨λ¦¬λ₯Ό ν λΉν μ μκ² ν΄μ€λλ€.
λμ ν λΉμ ν΅ν΄ Heap μμμ λ°μ΄ν°λ₯Ό ν λΉν μ μμ΅λλ€.
μ¦, λμ ν λΉμ ν μμμμ λ°μν©λλ€.
κ·Έλ¦¬κ³ κ·Έ ν λΉλ κ°μ λν μ κ·Όμ ν¬μΈν°λ₯Ό ν΅ν΄μλ§ κ°λ₯ν©λλ€.
C++ μμ λμ λ©λͺ¨λ¦¬μ ν λΉμ new ν€μλλ‘ μ΄λ£¨μ΄μ§λλ€.
λ€μ μ½λλ‘ μ΄ν΄λ³΄κ² μ΅λλ€.
int *int_ptr{nullptr};
int_ptr = new int; // allocate an integer on the heap
cout << int_ptr << endl; // 16μ§μ λ©λͺ¨λ¦¬ μμΉ
cout << *int_ptr << endl; // garbage value
*int_ptr = 100;
cout << *int_ptr << endl; // 100
delete int_ptr // ν λΉ ν΄μ
μ²μμ int_ptrλΌλ μ΄λ¦μ ν¬μΈν°λ₯Ό λ§λ€μμ΅λλ€.
μ΄ν ν΄λΉ ν¬μΈν°κ° μ μ ν¬κΈ°μ λ©λͺ¨λ¦¬λ₯Ό λμ μΌλ‘ ν λΉλ°μμ΅λλ€.
μ΄ λ©λͺ¨λ¦¬μλ μ°λ¦¬κ° μ μ μΌλ‘ λ³μλ₯Ό μ μΈν λμλ λ€λ₯΄κ² μ΄λ¦μ΄ μμ΅λλ€.
κ·Έλμ μμμ μμ νμλ― int_ptr ν¬μΈν°λ₯Ό ν΅ν΄μλ§ μ κ·Όν μ μμ΅λλ€.
μ€μν μ μ μ΄λ° μμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬λ garbage dataλ₯Ό λ΄κ³ μμ΅λλ€.
κ·Έλ κΈ° λλ¬Έμ μ΄κΈ°νλ₯Ό νμ§ μμΌλ©΄ μ€λ₯κ° λ°μν©λλ€.
μ΄νλ κΈ°μ‘΄μ ν¬μΈν°μ κ°λ κ³Ό λμΌν©λλ€.
νκ°μ§ λ μ€μν μ μ ν λΉν λ©λͺ¨λ¦¬λ₯Ό μ΄μ© μ΄ν delete ν€μλλ‘ ν λΉ ν΄μ ν΄μ£Όμ΄μΌ ν©λλ€.
κ·Έλ μ§ μμΌλ©΄ λμ ν λΉκ³Ό λ€λ₯Ό λ°κ° μκ² μ£ ?
λ°°μ΄μ λμ ν λΉ
λ°°μ΄μ λμ ν λΉ μμ λ€λ₯΄μ§ μμ΅λλ€.
λ¨μ§ λκ΄νΈλ₯Ό ν΅ν΄μ λ°°μ΄μ΄λΌλ νμλ§ ν΄ μ£Όλ©΄ λ©λλ€.
#include <iostream>
using namespace std;
int main() {
size_t size{};
cout << "Enter the size of array: ";
cin >> size;
double *arr_ptr = new double[size];
for (size_t i{}; i < size; i++) {
arr_ptr[i] = i + 1;
cout << arr_ptr[i] << endl;
}
delete[] arr_ptr;
cout << endl;
return 0;
}
λ°°μ΄μμλ μμ λμΌνκ² ν λΉλ λ©λͺ¨λ¦¬λ₯Ό λ§μ§λ§μ ν΄μ ν΄μ£Όμ΄μΌ ν©λλ€.
μ΄κ²μ delete ν€μλ μμ λκ΄νΈλ₯Ό λΆμ΄λ κ²μΌλ‘ ν μ μμ΅λλ€. (delete[])
ν·κ°λ¦¬λ λΆλΆμ ChatGPTμκ² λ¬Όμ΄λ³΄λ©΄μ νμΈν λΆλΆλ μλλ°,
κ½€λ μ ννκ³ μ 리λ μ 보λ₯Ό μ 곡ν΄μ€λλ€.
ν·κ°λ¦¬λ λΆλΆμ λν΄μ λ¬Όμ΄λ³΄λ κ²λ μ’μ κ² κ°μ΅λλ€.
'C++ > ν¬μΈν° (Pointers)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] ν¬μΈν° μ°μ°/μ°μ (Pointer Arithmetic) (0) | 2023.12.19 |
---|---|
[C++] λ°°μ΄κ³Ό ν¬μΈν°μ κ΄κ³ (Relationship Between Arrays and Pointers) (1) | 2023.12.19 |
[C++] μμ°Έμ‘° (Dereferencing a Pointer) (0) | 2023.12.19 |
[C++] λ°μ΄ν°μ μ£Όμμ μ κ·Όνλ λ°©λ² (1) | 2023.12.19 |
[C++] ν¬μΈν°μ μ μΈ (Declaring Pointers) (0) | 2023.12.19 |