이거 왜 이렇게 나옴?
C++ 좆버그 발견함ㄷㄷㄷㄷ
익명(61.79)
2020-05-22 17:12
추천 1
댓글 10
다른 게시글
-
윈도우 커널 드라이버 개발자 본적 있으 [1]익명(106.241) | 20.05.22추천 0
-
비싼 돈주고 IDE사면 무슨기능있음 [2]익명(223.38) | 20.05.22추천 0
-
뉴비 질문좀 [14]익명(121.148) | 20.05.22추천 0
-
html / css / js 2일차익명(121.160) | 20.05.22추천 0
-
회로 볼줄 아는놈만 [2]익명(124.153) | 20.05.22추천 0
-
Vim 배울만 함? [6]미소불패(bemf1002) | 20.05.22추천 0
-
소마하기 카카오 인턴 하기 뭐할래 [6]익명(106.244) | 20.05.22추천 0
-
오늘 오랜만에 알고리즘 순공 3시간조졌음익명(61.79) | 20.05.22추천 0
-
중고거래 무산만남의광장(aerohong) | 20.05.22추천 0
-
C언어 해보는데 어려우면 [6]익명(211.210) | 20.05.22추천 0
몰라서묻냐
버그가 아닐세. 로컬 변수와 스레드스택공간, null terminate char등을 깨우치고 나면 자연히 알게 될걸세.
메모리공간 c랑 p1배열이 연속적으로 있고 cout으로 p2 출력하는 과정에서 p2가 char이 아닌 char*라 널문자가 나올때까지 출력해서 c출력하고 그 다음 p1[0]출력하고 p1[1]이 널문자라서 멈춤
왜 그 넓은 메모리공간에서 연속적으로 할당한거임?
님이 주소 출력해보세요
결과가 의도되지 않았다는걸 보면 막줄을 *p2라고 하고 싶었나 보군
지능문제
위에 댓글 나도 이해는 되는데 글쓴이가 졸라 재밋는 걸 발견햇군 ㅋㅋ
왜 넓은 메모리에서 연속적으로 할당되냐면, 함수의 지역변수는 스택 자료구조를 쓰기 때문임. char c;를 할 때 현재 esp 레지스터에서 1이 감소되고, 그 다음에 char p1;을 할 때 esp 레지스터에서 10이 감소됨. 저런 식으로 메모리 공간을 할당하기 때문. 물론 할당할 때마다 감소하는 건 아니고 함수가 시작할 때 사용할 영역을 미리 확보하지만 연속적으로 할당하기 때문에 붙어있기 마련. 스택인데 c가 먼저 할당되지 않고 p1에 먼저 할당돼서 "aa"가 나오는 이유는 컴파일러에 따라 변수의 선언 순서에 따른 메모리 영역의 위치는 바뀔 수 있기 때문.
그냥 UB