pmch0325   4년 전

안녕하세요 코딩 초보입니다.

C언어에서 배열크기를 코딩할 때 정하지 않고 입력에 따라 설정하려고 하면 다음과 같이 하면 된다고 해서 따라했습니다.

int* arr;
arr = (int*)malloc(sizeof(int) * a);

배열크기로 쓸 입력을 a로 받았습니다. 잘 이해는 안됐어요 포인터를 생성하고 malloc으로 사이즈를 정해준것이 어떻게 배열과 같이 쓰이는 건지...

그래도 그냥 무작정 따라해서 제출해 봤는데 틀렸다고 하더라구요.

끙끙 고민하다가 그냥 다른부분은 그대로 놔두고 동적할당 부분을 지운뒤 배열크기를 크게 대충 1000으로 때려잡으니 정답이라고 하네요.

왜 이런건가요?? 저 코드는 쓰면 안되나요??

djm03178   4년 전

단순히 a로 잡으면 되는 게 아니라, 실제로 배열에 몇 개의 원소를 담아야 하는지가 중요합니다. 원소를 몇 개 쓰는지 계산해보세요.

pmch0325   4년 전

헉 맞네요 a는 입력받을 횟수고 입력 한번에 정수 2개를 받는거라서

a의 2배만큼 잡아야 하는건데.. 근데 왜 테스트 해볼땐 오류가 없었을까요..

djm03178   4년 전

배열의 크기를 넘어선다고 무조건 런타임 에러나 다른 문제가 발생하는 것은 아니기 때문입니다. 메모리 할당은 블록 단위로 이루어지고, 이 내에서의 메모리 침범은 런타임 에러를 일으키지 않습니다. 그 위치에 다른 중요한 변수값이 있었다면 다른 문제를 일으킬 수도 있지만, 그렇게 할당이 되지 않았을 수도 있고요.

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