포인터 마무리

CJB_ny·2022년 8월 8일
0

C++ 정리

목록 보기
40/95
post-thumbnail

포인터

주소를 담는 바구니

진퉁은 저 멀리(힙)있음.

p는 단지 그곳으로 워프하는 포탈

배열

진짜 배기 원조데이터

닭장처럼 데이터의 묶음 (엄청 많고 거대함)

2차원 배열 vs 다중 포인터 ❗

현재 출력을 하면 이런 상태로 크래쉬가 난다.

이유 ❗❗❗

현재 ptr22의 주소값은 0x0000006E5EEFF928 이거이다.

그렇다면

주소값변수명값 (데이터)
0x0000006E5EEFF928ptr22주소1
주소1ptr22주소2

이런 구조라는 것인데

실제로 *ptr22 로 한번 접근을 하면 주소값이 있어야하는데

0x00000000000001이라는 2차원 배열의 첫번째 값이 들어 가있는 것이다

0x01 일로 접근을 할려고하니까 엑세스 위반이라고 에러가 뜨는 것이다.

그래서 다중 포인터랑 다차원 배열은 전혀 호환이 되지 않는 것이다.

int(*)[배열의 크기]

int [] 배열인데 타입이 포인터 변수이다. => int(*p2)[2]

p2라는 녀석을 타고가면 크기가 2짜리인 배열이 있다.

그래서 배열은 연속적인 메모리 구조를 가지기 때문에

*(p2 + 1) => [3][4] 의 시작 주소로 가게된다.

(크게 사용할 일 없어서 기억 못해도 ㄱㅊ다고한다)

결론

2차원 배열을 사용을 할 떄 다중포인터를 사용하는 것은 위험하다.

주의 사항

유효하지 않은 주소를 넘겨주게 된다.

TestPointer의 지역변수은 a는 종료되면 유효하지 않은 주소값임.

메모리가 가르키는 주소는 그래도 있기 때문에

크래쉬는 나지 않지만 메모리가 오염된다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글