게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
포인터 스포일
게시물ID : programmer_5229짧은주소 복사하기
작성자 : 황금비
추천 : 3/4
조회수 : 753회
댓글수 : 21개
등록시간 : 2014/08/31 01:42:40
실행하다 보면 뻑나죠?

그중에 하나가 데이터 오염입니다.

다음은 전형적인 데이터 오염의 예입니다.


class Tst
{
private:
int a;

public:
Tst():a(100){}

int GetA()
{
return a;
}
};

int main()
{
Tst t;

int* pp = (int*)&t;
*pp= 10000;

printf("%d\n", t.GetA());
...
}

클래스에서 private로 선언하면 보호받을 거 같죠?
이 예제를 돌리면  a 값은 바뀌어 버립니다.
포인터 사용에서 leak, dangling point, spoil을 조심해야 하는데 private라고 하면 접근 권한 때문에 데이터 접근이 마음대로 안되니까
보호받을 수 있다고 착각할 수도 있습니다.

c++에서 private는 그냥 scope입니다. 이런 스코프를 설정했다고 해서 데이터의 오염을 피할 수 있는 것은 아닙니다.
이점 주의가 필요해서 잡글 올려보았습니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호