C 언어
이 튜토리얼에서는 표준 라이브러리 함수인 malloc(), calloc(), free() 및 realloc()을 사용하여 C 프로그램에서 동적으로 메모리를 할당하는 방법을 배웁니다.
아시다시피 배열은 고정된 수의 값 모음입니다. 배열의 크기는 한 번 선언되면 변경할 수 없습니다.
때로는 선언한 배열의 크기가 충분하지 않을 수 있습니다. 이 문제를 해결하기 위해 런타임 중에 메모리를 수동으로 할당할 수 있습니다. 이것을 C 프로그래밍에서 동적 메모리 할당이라고 합니다.
메모리를 동적으로 할당하려면 라이브러리 함수는 malloc()
입니다. , calloc()
, realloc()
및 free()
사용됩니다. 이 함수는 <stdlib.h>
에 정의되어 있습니다. 헤더 파일.
"malloc"이라는 이름은 메모리 할당을 나타냅니다.
malloc()
함수는 지정된 바이트 수의 메모리 블록을 예약합니다. 그리고 void
의 포인터를 반환합니다. 모든 형식의 포인터로 캐스팅될 수 있습니다.
ptr = (castType*) malloc(size);
예
ptr = (float*) malloc(100 * sizeof(float));
위의 명령문은 400바이트의 메모리를 할당합니다. float
의 크기 때문입니다. 4바이트입니다. 그리고 포인터 ptr 할당된 메모리의 첫 번째 바이트 주소를 보유합니다.
표현식 결과 NULL
메모리를 할당할 수 없는 경우 포인터입니다.
"calloc"이라는 이름은 연속 할당을 나타냅니다.
malloc()
함수는 메모리를 할당하고 메모리를 초기화하지 않은 상태로 둡니다. 반면에 calloc()
함수는 메모리를 할당하고 모든 비트를 0으로 초기화합니다.
ptr = (castType*)calloc(n, size);
예:
ptr = (float*) calloc(25, sizeof(float));
위의 명령문은 float
유형의 요소 25개에 대해 메모리에 연속 공간을 할당합니다. .
calloc()
로 생성된 동적으로 할당된 메모리 또는 malloc()
저절로 풀리지 않습니다. free()
을 명시적으로 사용해야 합니다. 공간을 해제합니다.
free(ptr);
이 문은 ptr
이 가리키는 메모리에 할당된 공간을 해제합니다. .
// Program to calculate the sum of n numbers entered by the user
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, *ptr, sum = 0;
printf("Enter number of elements: ");
scanf("%d", &n);
ptr = (int*) malloc(n * sizeof(int));
// if memory cannot be allocated
if(ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf("Enter elements: ");
for(i = 0; i < n; ++i) {
scanf("%d", ptr + i);
sum += *(ptr + i);
}
printf("Sum = %d", sum);
// deallocating the memory
free(ptr);
return 0;
}
출력
Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
여기에서 n에 대한 메모리를 동적으로 할당했습니다. int
의 수 .
// Program to calculate the sum of n numbers entered by the user
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, *ptr, sum = 0;
printf("Enter number of elements: ");
scanf("%d", &n);
ptr = (int*) calloc(n, sizeof(int));
if(ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf("Enter elements: ");
for(i = 0; i < n; ++i) {
scanf("%d", ptr + i);
sum += *(ptr + i);
}
printf("Sum = %d", sum);
free(ptr);
return 0;
}
출력
Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
<시간>
동적으로 할당된 메모리가 부족하거나 필요 이상인 경우 realloc()
을 사용하여 이전에 할당된 메모리의 크기를 변경할 수 있습니다. 기능.
ptr = realloc(ptr, x);
여기, ptr 새 크기 x로 재할당됩니다. .
<시간>
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr, i , n1, n2;
printf("Enter size: ");
scanf("%d", &n1);
ptr = (int*) malloc(n1 * sizeof(int));
printf("Addresses of previously allocated memory:\n");
for(i = 0; i < n1; ++i)
printf("%pc\n",ptr + i);
printf("\nEnter the new size: ");
scanf("%d", &n2);
// rellocating the memory
ptr = realloc(ptr, n2 * sizeof(int));
printf("Addresses of newly allocated memory:\n");
for(i = 0; i < n2; ++i)
printf("%pc\n", ptr + i);
free(ptr);
return 0;
}
출력
Enter size: 2 Addresses of previously allocated memory: 26855472 26855476 Enter the new size: 4 Addresses of newly allocated memory: 26855472 26855476 26855480 26855484
C 언어
구성품 및 소모품 Arduino UNO × 1 Arduino용 PHPoC WiFi 실드 × 1 씨드 서보 모터 × 1 점퍼 와이어 × 1 이 프로젝트 정보 소개 초보자라면 아두이노 - 서보 모터와 아두이노 - 와이파이에 대해 읽어보길 권한다. 아두이노를 인터넷에 연결하기 위해서는 이더넷 쉴드, 와이파이 쉴드, PHPoC 쉴드, PHPoC 와이파이 쉴드와 같은 일종의 인터넷 쉴드를 사용해야 합니다. PHPoC 쉴드의 두드러진 특징
혼자 나가서 금속 가공 사업을 시작하려면 무엇이 필요합니까? Dynamic Machining의 경우 모든 것을 만드는 기본 사항을 알고 신뢰할 수 있는 경험 많은 비즈니스 파트너를 확보하는 것입니다. CNC 기계 공장을 시작하는 것은 위험한 시도입니다. 그러나 올바른 태도, 자신감, 부품 제작 경험을 바탕으로 Dynamic Machining은 소규모로 시작하여 고객으로부터 신뢰를 얻는 것이 이익이 된다는 것을 증명하고 있습니다. 솔트레이크시티에 기반을 둔 이 기계 공장의 프로필에서 우리는 두 설립자와 그들의 상사가 되려는 열