본문 바로가기
C++

pointer new, delete, 지역 pointer 변수 오류

by leo21c 2017. 3. 28.

 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