블로그 이미지
이태원에서 사는 다섯식구의 무직 가장. 흰둥에미

카테고리

분류 전체보기 (184)
Itaewon (2)
ryu's?? (1)
20121210이전 (20)
20130827이전 (147)
soo'study (13)
Total34,955
Today1
Yesterday15

포인터

20130827이전/C&C++ / 2013.01.23 16:51

포인터

- C나 C++을 이용해 개발하는 사람들 중, 띵~ 소리를 안들어본 사람이 있을까 싶다.

  많은 띵~이 있겠지만, 여기선 널 포인터나 유효하지 않은 포인터 참조등을 말한다.

  잘못된 포인터 참조로 인해 발생하는 뻑은 꽤 많은 듯 하며, 현업 개발자들도 정도가 다르긴 해도,

  방어코드 없이 사용되는 포인터 들에 대해 꾸엑한다.


포인터란

- 가리키는 것(포인트하고 있는 것)

  포인터 변수는 주소값을 저장할 수 있는 변수

  왜 주소값이냐?? 컴퓨터에서 데이터는 메모리상에 저장되며, 그 메모리에 접근하기 위해선, 특정 주소를 알아야 함이 당연하다.

  일반 변수는 그 주소와 실제 데이터를 연관시켜주는 역할을 하며,

  포인터 변수는 자기의 주소와 실제 데이터의 주소(포인터 변수에게는 실제 데이터가 됨)를 연관시켜준다.


일반 변수 포인터 변수

 데이터

선언된 타입의 데이터

주소 데이터 

 주소

메모리 상 변수가 위치한 주소

메모리 상 변수가 위치한 주소 

int a= 10;

int* pa = &a;  //pa에 대입할 수 있는 것은 주소이므로, a변수의 주소를 취해 대입해준다.

*pa = 20;       //*연산자를 이용해, pa가 가진 주소에 있는 값에 접근한다. (a = 20;과 같은 의미라고 보면 됨)


방어코드

- 클래스들에 대해 포인터를 쓰게 되면, 항상 클래스 포인터를 사용하기 전에는 valid한 포인터인지 체크해 주어야 함.

  if (nullptr != pMyClass) { ... }

  메모리 해제 시에는 항상 NULL값을 넣어주는 습관을 들이자. 어떤 데이터가 위치한 곳에 대한 주소를 가지고 있으므로,

  해당 객체는 해제되었어도, 포인터 변수에는 주소값이 있기에 위의 널체크에서 걸러내지 못한다.

  또는 스마트 포인터를 이용하여, 메모리 해제를 자동으로 해주게끔하자.



신고

'20130827이전 > C&C++' 카테고리의 다른 글

const 키워드  (0) 2013.01.30
셔플 알고리즘  (1) 2013.01.28
포인터  (2) 2013.01.23
열혈강의 C++ 언어본색 1장 - 3장 정리.  (1) 2013.01.13
디버깅  (0) 2013.01.05
조건문, 선택문  (0) 2012.12.28
Posted by 흰둥에미
TAG

최근에 달린 댓글

최근에 받은 트랙백

글 보관함