- memset(포인터, 설정할값, 크기);
- void *memset(void *_Dst, int _Val, size_t _Size);
- 값 설정이 끝난 포인터를 반환
여기 설명에서 void 라고 쓰여있는 줄이 무슨 의미인지 모르겠어요.. 그리구 malloc 설명에서 성공하면 메모리 주소를 반환 실패하면 NULL 반환이라고 되어있는데 malloc 이라는게 heap에서 특정 크기의 메모리를 할당하는건데 실패할수도 있는건가요..?
UNIT 34.5 void 포인터 선언하기에서 void 포인터를 설명하고 있습니다.
void 포인터 = void *
UNIT 34.5를 복습하고, 모두 이해하기보단 진도를 나가면서 예제를 하나씩 실습하면서 사용법에 익숙해지는 게 더 좋습니다. 용법에 익숙해지면 의미에도 익숙해지는 법입니다.
malloc 함수는 전형적으로 void 포인터를 반환하는 함수입니다. UNIT 34.5에서 설명한 것처럼 void 포인터는 어떤 자료형이든 저장하고 변환되기 때문에 범용 포인터라고 합니다.
malloc을 사용해 int 자료형을 위한 메모리를 할당할 수도 있고, char 자료형을 위한 메모리를 할당할 수도 있습니다. malloc의 반환형이 int *이나 char *이면 곤란하죠. 범용 포인터인 void *로 되어 있는 이유입니다.
따라서 UNIT 34.5에서 void 포인터를 학습하고 이해한 다음에 UNIT 35에서 void *malloc(...) 형태를 학습해야 의미를 이해할 수 있습니다.
표기법은 익숙해지면 됩니다. C 언어 공식 문서나 도움말에서는 질문한 것과 같은 표기법을 사용합니다.
https://en.cppreference.com/w/c/memory/malloc
메모리 할당은 실패할 수 있습니다.
시스템의 메모리가 모두 사용된 경우 실제로 메모리 할당이 실패합니다.
일반 사용자 PC보다는 동시에 많은 사용자를 처리하는 웹 서버 같은 곳에서 사용자가 몰리면 가용한 메모리를 모두 사용하고 메모리 할당이 실패할 수 있습니다. 이런 경우 신규 사용자 접속을 위한 메모리를 확보하지 못했기 때문에 사용자 입장에서는 로그인이 안 되거나 사용 중에 튕기는 현상 등을 경험할 수 있습니다.