C++
pointer new, delete, 지역 pointer 변수 오류
leo21c
2017. 3. 28. 14:13
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;
위와 같이 해야만 같은 주소 값을 갖게 된다.
잊지말자!!!
이 부분은 헷갈릴수 있고 실수도 많이 하는 부분이다.
개발 한지 얼마나 오래 됐는데 이것도 실수 하냐?
쪽팔린다.
LIST