pby2016   1년 전

아래 코드를 요약하면
1. 스택공간[10000]
2. 명령어횟수 입력(scanf함수)
3. 명령어 비교(strcmp함수)
4. 명령어 수행(if함수)
5. 정상 작동

궁금한점은
스택 공간에서 15번째 줄에 주석처리해놓은 malloc 부분을 사용하면 런타임에러가 나는데 이유를 알 수 있을까요?

bupjae   1년 전

주석처리된 15번째 줄은 int 크기의 수 "1개"를 담을 수 있는 메모리를 할당받게 됩니다.

이렇게 되면 입력 처리 중 스택의 크기가 2 또는 그 이상이 되어야 할 때 할당받은 메모리를 벗어난 곳을 사용하게 됩니다.

이 경우 프로그램의 실행 결과는 정의되지 않습니다. (기술적으로는 Undefined Behavior 라고 부릅니다).


malloc 를 사용하고 싶으시다면 n 을 입력받은 후에 할당받을 메모리 크기를 sizeof(int) * n 으로 설정하셔야 합니다.

pby2016   1년 전

와... 감사합니다
처음에 (정수) * sizeof(int)를 했었는데

sizeof(동적메모리변수) 이랑 sizeof(*동적메모리변수) 를 출력했을 때
(정수) 값을 바꿔도 계속 똑같은 값이 나오길래 (정수) * sizeof(int) 부분이 헷갈렸었는데
지금 확인해보니 제가 출력했던 값은 변수자료형크기랑 변수주소크기 였던 것을 깨달았습니다.

감사합니다!!

댓글을 작성하려면 로그인해야 합니다.