3217
2018-12-02 05:47:42
1
간단히 말해서, checksize() 가 int* 형 인자 arr 을 받고있습니다. 이것을, int** 형 인자를 받도록 수정하세요. 당연히 함수를 호출할 때도 arr 대신 &arr 을 인자로 주어야하고, 함수 내부에서도 arr 대신 *arr 을 써야합니다.
checksize() 함수는 count 와 size 라는 인자를 변경할 수 있도록 이 인자들을 값으로 넘기지 않고 주소값(포인터)로 넘기고 있습니다. 그런데, checksize() 함수는 arr 도 변경합니다. 그렇다면 arr 도 주소값(포인터)로 넘겨야합니다. 여기서는 arr 이 포인터이므로 포인터의 포인터를 넘겨야겠죠 :)
지금 구현한 것은 포인터로 넘기지 않고 값으로 넘닙니다. 따라서, checksize() 함수가 realloc() 한 것이 적용되지 않습니다. 그런데, 왜 100 을 넘겨서 메모리에 저장할 수 있는가? 짐작하자면 malloc() 함수가 메모리를 효율적으로 관리하기 위해 여분의 공간을 같이 할당(메모리 정렬, 얼라인먼트, 패딩)했기 때문일 것입니다. 그것이 정수형 4개에 해당하는 것 같고 그 범위를 넘어가면 허용되지 않은 메모리 영역에 접근하는 것일테죠.