C 언어에서 void 포인터는 암시적으로 개체 포인터 유형으로 변환됩니다. malloc() 함수는 C89 표준에서 void *를 반환합니다. 이전 버전의 C에서 malloc()은 char *를 반환합니다. C++ 언어에서 기본적으로 malloc()은 int 값을 반환합니다. 따라서 포인터는 명시적 캐스팅을 사용하여 개체 포인터로 변환됩니다.
다음은 C 언어에서 메모리를 할당하는 구문입니다.
pointer_name = malloc(size);
여기,
pointer_name − 포인터에 부여된 모든 이름.
크기 − 할당된 메모리의 크기(바이트)입니다.
다음은 C 언어의 malloc() 예제입니다.
예시
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 4, i, *p, s = 0;
p = malloc(n * sizeof(int));
if(p == NULL) {
printf("\nError! memory not allocated.");
exit(0);
}
printf("\nEnter elements of array : ");
for(i = 0; i < n; ++i) {
scanf("%d", p + i);
s += *(p + i);
}
printf("\nSum : %d", s);
return 0;
} 출력
Enter elements of array : 2 28 12 32 Sum : 74
위의 C 언어 예제에서 명시적 캐스팅을 수행하면 오류가 표시되지 않습니다.
다음은 C++ 언어에서 메모리를 할당하는 구문입니다.
pointer_name = (cast-type*) malloc(size);
여기,
pointer_name − 포인터에 부여된 모든 이름.
캐스트 유형 − malloc()에 의해 할당된 메모리를 캐스팅하려는 데이터 유형.
크기 − 할당된 메모리의 크기(바이트)입니다.
다음은 C++ 언어의 malloc() 예제입니다.
예시
#include <iostream>
using namespace std;
int main() {
int n = 4, i, *p, s = 0;
p = (int *)malloc(n * sizeof(int));
if(p == NULL) {
cout << "\nError! memory not allocated.";
exit(0);
}
cout << "\nEnter elements of array : ";
for(i = 0; i < n; ++i) {
cin >> (p + i);
s += *(p + i);
}
cout << "\nSum : ", s;
return 0;
} 출력
Enter elements of array : 28 65 3 8 Sum : 104
위의 C++ 언어 예제에서 명시적 캐스팅을 수행하지 않으면 프로그램은 다음 오류를 표시합니다.
error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive] p = malloc(n * sizeof(int));