Pointer의 이름이 길거나 구조체 안에 있는 포인터일 경우 지역 포인터 변수를 만들어 임시 처리를 하는 경우가 있다.
이 때 오류를 범할수 있다.
예을 들어 A구조체에 char* b가 존재할 경우 우리는 사용을 할 때 A->b로 접근을 해서 사용을 한다.
이 이름이 길면 함수 안에서 임시 포인터를 만들어서 사용을 한다.
char* temp = A->b;
위와 같이 하면 b의 포인터 주소가 temp와 같고 우리는 temp를 A->b를 대신해서 사용을 한다.
만약 A->b를 delete 하고 다시 new를 해야 하는 상황일 경우 어떤 일이 발생할까?
char* temp = A->b;
if (temp) delete temp;
temp = NULL;
위와 같이 처리를 하면 A->b는 NULL이 될까?
temp는 A->b의 주소를 가지고 있지만
temp는 NULL이 되도 A->b는 NULL이 되지 않는다.
만약 temp를 new하면 어떻게 될까?
temp = new char[10];
A->b의 주소와 temp 주소가 달라지게 된다.
따라서 temp와 A->b는 다른 주소를 가지게 되게 때문에
A->b = new char[10];
temp = A->b;
위와 같이 해야만 같은 주소 값을 갖게 된다.
잊지말자!!!
이 부분은 헷갈릴수 있고 실수도 많이 하는 부분이다.
개발 한지 얼마나 오래 됐는데 이것도 실수 하냐?
쪽팔린다.
'C++' 카테고리의 다른 글
std::map에서 char array를 key로 사용하기 (0) | 2021.04.08 |
---|---|
memcmp 바이트 Array 비교를 할 때 사용 (0) | 2021.03.31 |
std::string Split (0) | 2016.04.26 |
Visual Studio "he optimize pragma" 처리 (0) | 2015.12.22 |
IME 선택된 언어 확인하기 (0) | 2014.09.05 |