CLASS101+ | 세상의 모든 클래스를 하나의 구독으로
2700개 이상의 클래스로 일러스트, 공예, 코딩, 부업, 주식까지 세상의 모든 분야를 배워보세요. CLASS101에서 14일 무료 체험해 보세요.
class101.net
의도는 score (구조체) 타입의 s를 ps score포인터형으로 받고, 동적 메모리 할당을 12번 줄 코드로 하고 14, 15번 줄 코드를 통해 출력이 모두 222로 나와야 하는 것이다. s.I_E 와 ps -> I_E는 같은 값을 갖고 있다고 생각했음.

breakpoint 확인


11: ps기 s 주소를 가리키는 것을 알 수 있다. score 구조체 요소의 값도 s와 동일하다.
12: malloc이 실행되자 ps가 향하는 주소가 달라졌다. 값도 모두 0으로 바뀌었다.


따라서 14, 15에서 값이 s, ps 따로 들어가게 되었다.
그렇다면 malloc 후에 s주소를 연결해주면 어떻게 될까?




사실상 malloc 코드(12번줄이)가 없었던 것으로 변한다.

그리고 18번 줄에서 할당되지 않았다고 에러가 발생한다.
결론: s, ps의 차이는 결국 정적, 동적 메모리 할당인 것 같다. 지금까지 무엇을 위한 뻘짓을 했는지 모르겠으나. 도움은 되었다.
malloc() 속 sizeof()는 값을 도대체 뭐로 정해야 하는가. casting 데이터 형이 score*이면 sizeof(score)가 맞는 것인가?
논리적으로는 이게 맞는 것 같은데 한참 작은 sizeof(char)로 해도 데이터 출력이 정상적으로 된다. 무엇이 문제인가? 그저 운인가?