void allocArray(void **ptr, int arraysize, int elementsize)
{
*ptr = malloc(sizeof(arraysize * elementsize));
}
이게 정답이라고 하는데
long long, int 둘 다 받을 수 있어야 하는 걸로 알고 있는데
왜 매개변수에 int arraysize, int elementsize 이렇게 int로 고정하나요?
그리고
메모리를 할당할 때 왜 배열크기 * 요소크기 만큼 할당하는지도 모르겠습니다..!!
감사합니다.
https://en.cppreference.com/w/c/memory/malloc
malloc은 할당할 메모리 크기를 정수로 받습니다.
따라서 숫자를 사용합니다.
https://en.cppreference.com/w/c/types/size_t
malloc 함수의 정의를 보면 size_t로 되어 있는데, 보통 크기가 필요한 곳에는 size_t처럼 정의되어 있습니다.
size_t가 빨간색으로 implemtation-defined라고 되어 있는데, 구현체에 따라 다르기 때문입니다. C 언어는 역사가 오래된 언어이고, 8비트, 16비트 환경에서도 사용되던 언어이므로 각각 해당 구현체(컴파일러 등)에 따라 다릅니다.
C99 이후로는 16비트 이하가 되면 안 된다는 규정이 있지만, C99 표준 이전의 표준, 흔히 C78이면 이런 규정이 없습니다. 1978년 표준안이죠.
void allocArray(void **ptr, int arraysize, int elementsize)
{
*ptr = malloc(sizeof(arraysize * elementsize));
}
문자열이란? 문자로 된 1차원 배열이죠.
배열 크기, 원소 크기로 할당하는 것입니다. 범용으로 만든 함수이니까요.
int의 크기가 4바이트이고, 10개 원소라면 40바이트를 할당합니다.
char의 크기가 1바이트이고, 10개 원소라면 10바이트를 할당하는 게 됩니다.
void allocArray(void **ptr, int arraysize, int elementsize)
alloc_int(int **ptr, ...)
alloc_float(float **ptr, ...)
alloc_double(float **ptr, ...)
alloc_char(char **ptr, ...)
alloc_short(short **ptr, ...)
alloc_unsigned_int(unsigned int **ptr, ...)
alloc_unsigned_short(unsigned short **ptr, ...)
이렇게 각 데이터 타입별로 수십 개의 함수를 반복해서 작성하시면 됩니다.
malloc() 함수가 대표적인 범용 함수입니다.