주소를 담는 바구니
진퉁은 저 멀리(힙)있음.
p는 단지 그곳으로 워프하는 포탈
진짜 배기 원조데이터
닭장처럼 데이터의 묶음 (엄청 많고 거대함)
현재 출력을 하면 이런 상태로 크래쉬가 난다.
현재 ptr22의 주소값은 0x0000006E5EEFF928 이거이다.
그렇다면
주소값 | 변수명 | 값 (데이터) |
---|---|---|
0x0000006E5EEFF928 | ptr22 | 주소1 |
주소1 | ptr22 | 주소2 |
이런 구조라는 것인데
실제로 *ptr22 로 한번 접근을 하면 주소값이 있어야하는데
0x00000000000001이라는 2차원 배열의 첫번째 값이 들어 가있는 것이다
0x01 일로 접근을 할려고하니까 엑세스 위반이라고 에러가 뜨는 것이다.
그래서 다중 포인터랑 다차원 배열은 전혀 호환이 되지 않는 것이다.
int [] 배열인데 타입이 포인터 변수이다. => int(*p2)[2]
p2라는 녀석을 타고가면 크기가 2짜리인 배열이 있다.
그래서 배열은 연속적인 메모리 구조를 가지기 때문에
*(p2 + 1) => [3][4] 의 시작 주소로 가게된다.
(크게 사용할 일 없어서 기억 못해도 ㄱㅊ다고한다)
2차원 배열을 사용을 할 떄 다중포인터를 사용하는 것은 위험하다.
유효하지 않은 주소를 넘겨주게 된다.
TestPointer의 지역변수은 a는 종료되면 유효하지 않은 주소값임.
메모리가 가르키는 주소는 그래도 있기 때문에
크래쉬는 나지 않지만 메모리가 오염된다.