이우의 개발일지
[C++] 동적할당 본문
동적할당이란?
동적 할당, 본래의 의미로는 동적 메모리 할당으로 사용자가 임의로 원하는 영역(Size) 만큼 메모리에 할당(Allocation)하는 기법을 말한다.
지역적으로도, 전역적으로 접근이 가능하며 변동적(런타임 상황에 따라 변경이 됨)이기 때문에 메모리의 힙 영역에 적재된다.
동적할당을 이용한 문자열 복사하기
#include <string>
#include <iostream>
#include<random>
#include <vector>
#include <algorithm>
using namespace std;
const int kMaxstr = 100; // 전역변수 설정
bool IsEqual(const char st1[], const char str2[]) {
for (int i = 0; i < sizeof(st1); i++) {
if (st1[i] == str2[i]) {
}
else if (st1[i] == '\0') return true;
else if (st1[i] != str2[i]) {
return false;
}
}
return true;
}
int main() {
const char str1[kMaxstr] = "Hello, World!";
char str2[kMaxstr];
memcpy(str2, str1, min(sizeof(str1), sizeof(str2))); // 문자열 복사
cout << str2 << endl;
char* dynamic_array = new char[kMaxstr];
memcpy(dynamic_array, str1, kMaxstr);
cout << dynamic_array << endl;
cout << str1 << " " << str2 << " " << dynamic_array << endl;
cout << size_t(str1) << " " << size_t(str2) << " " << size_t(dynamic_array); // 변수들의 주소
delete[] dynamic_array; // new로 할당받은 메모리는 꼭 지워줘야함.
return 0;
}
동적할당하는 방법
char *dynamic_char = new char[kMaxstr];
이런식으로 내가 선언하는 변수 앞에 포인터 * 을 붙여주고, new 와 선언할 변수 타입, 크기를 설정해줌.
why? 동적할당을 써야할까?
동적할당을 쓰는 이유는 컴파일 하기 전에 사용자가 어떤 값을 입력하냐에 따라서 배열의 사이즈를 조절해줘야하는 경우가 있다. 따라서 동적할당은 컴파일 이후에 사용자가 원하는 배열의 크기에 맞춰 할당을 해줄 수 있는 장점이 있다.
char* dynamic_array = new char[kMaxstr]();
끝에 이런식으로 가로를 넣어주면 동적할당된 배열의 안에 다 0을 넣어주는 것이다. {} 이 가로도 가능하다.
※ memcpy(str2, str1, min(sizeof(str1), sizeof(str2)));
memcpy 함수는 str2에 str1 문자열을 min(sizeof(str1), sizeof(str2)); 사이즈 만큼 복사하겠다는 뜻이다.
동적할당된 변수는 꼭 delete 해줘야함.
delete를 안해주면 메모리 누수가 발생하기 때문에 해줘야한다.
반응형
'Coding > Algorithm' 카테고리의 다른 글
[백준/C++] 11724번 연결 요소의 개수 / BFS 풀이 (0) | 2024.07.17 |
---|---|
[백준] BFS 유기농 배추 (0) | 2024.07.17 |
[STL] sort 정렬 함수 사용 방법/ 사용자 정의 비교 함수 사용/오름차순 내림차순 코드 (0) | 2024.05.21 |
[C++] 문자열 비교 함수 만들기 (0) | 2024.05.05 |
[C++] 포인터 /포인터 정의/포인터 배열 (0) | 2024.05.05 |