본문 바로가기

C++/기초

[C++] 동적할당

  1. 포인트 변수
    1. 선언
      • int *p;
      • p = (int*) malloc([size_int]); // cstyle
      • p = new [data_type] // cppstyle
        // 동적할당, 할당된 변수의 주소를 리턴
    2. 해제
      • free([var]); // cstyle
      • delete [var] // cppstyle
        // 동적할당 해제
  2. 배열
    1. 선언
      • variable = new data_type[size];
        • ex ) p = new int[3];
    2. 해제
      • delete []p;
    auto arrayIntTest = []() { 
        /*
        * 작성일자 : 23.12.18
        * 이슈사항 : inner function 을 표현하려함, 그러나 아직 사용법을 정확히 모름
        * 사용방법 : auto function_name = []() {  } 을 사용
        * 참고사이트 : https://stackoverflow.com/questions/4324763/can-we-have-functions-inside-functions-in-c
        */
        int* ptr;
        ptr = new int[3];

        for (int i = 0; i < 3; i++) {
            ptr[i] = i;
            cout << ptr[i] << endl;; // 데이터 출력
            // cin >> p[i]; // 데이터 입력
        }

        delete[] ptr; // 할당해제
        };

    arrayIntTest();

    auto arrayStringTest = []() { 
        char *ptr;
        ptr = new char[5];
        strcpy_s(ptr,5,"TEST");
        cout << ptr << endl;

        for (int i = 0; i < 4; i++) {
            cout << ptr[i] << endl;
        }

        delete []ptr;
        };

    arrayStringTest();
  1. 구조체
    1. 선언
      • struct struct_name { data_type name; data_type name; };
        • ex ) struct Test { int intValue; char charValue; };
    2. 해제
      1. delete p;
      2. array일 경우 delete []p;
	auto structTest = []() {
		struct Test {
			int intValue;
			char charValue;
		};
		Test* ptr;
		ptr = new Test[5];

		ptr->intValue = 5, ptr->charValue = 'A'; // 데이터 저장
		/*
		* 작성일자 : 23.12.21
		* 이슈사항 : "" 사용시 에러?
		* 해결방안 : ptr->intValue = 5, ptr->charValue = "A"
		*		  -> ptr->intValue = 5, ptr->charValue = 'A' 
		* 추가내용 : 확실치는 않아도 깨닫게 된 내용을 정리하자면 
					 "[data_type char]"는 const char를 인식된다.
		*			 그러므로 값을 변경하려는 경우 '' 를 사용해야할것 같다.
		*/
		cout << ptr->intValue << ", " << ptr->charValue << endl; // 데이터 출력
		// cin >> ptr->intValue >> ptr->charValue; // 데이터 입력(cin)

		for (int i = 0; i < 5; i++) {
			ptr[i].intValue = i, ptr[i].charValue = 'A' + i;
			cout << ptr[i].intValue << ", " << ptr[i].charValue << endl;
		}

		// delete []ptr;
		};

	structTest();