C 메모리 관리


이 장에서는 C의 동적 메모리 관리에 대해 설명합니다. C 언어는 메모리 할당 및 관리를 위한 여러 기능을 제공합니다. 이러한 함수는 <stdlib.h> 헤더 파일에서 찾을 수 있습니다.

일련 번호함수 및 설명
1void *calloc(int num, int size);
이 함수는 num 요소가 있는 배열을 할당하며, 각 요소의 크기는 size입니다. 바이트.
2void free(void *address)
이 함수는 주소가 가리키는 h 메모리 블록을 해제합니다.
3void *malloc(int num);
이 함수는 num바이트의 배열을 할당하고 초기화합니다.
4void *realloc(void *address, int newsize)
이 함수는 메모리를 재할당하고 메모리를 newsize로 확장합니다.

메모리를 동적으로 할당

프로그래밍할 때 배열의 크기를 미리 알면 배열을 정의하기가 더 쉽습니다. 예를 들어 사람의 이름을 저장하는 배열은 최대 100자까지 담을 수 있으므로 다음과 같이 배열을 정의하면 됩니다.

char name[100];

하지만 저장해야 하는 텍스트의 길이를 미리 알 수 없다면, 예를 들어, 주제 설명에 대한 자세한 정보를 저장하려는 경우입니다. 여기서는 아래와 같이 메모리 크기가 정의되지 않은 문자를 가리키는 포인터를 정의한 다음 수요에 따라 메모리를 할당해야 합니다.

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){   char name[100];   char *description;

   strcpy(name, "Zara Ali");   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );   if( description == NULL )   {
      fprintf(stderr, "Error - unable to allocate required memory\n");   }   else   {
      strcpy( description, "Zara ali a DPS student in class 10th");   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Name = Zara AliDescription: Zara ali a DPS student in class 10th

위 프로그램은 calloc()을 사용하여 작성할 수도 있습니다. 아래와 같이 malloc을 calloc으로 바꾸면 됩니다.

calloc(200, sizeof(char));

동적으로 메모리를 할당할 때 모든 권한을 갖고 모든 크기 값을 전달할 수 있습니다. 크기가 미리 정의된 배열은 정의한 후에는 크기를 변경할 수 없습니다.

메모리 크기 조정 및 해제

프로그램이 종료되면 운영 체제는 프로그램에 할당된 모든 메모리를 자동으로 해제합니다. 하지만 필요하지 않을 때마다 free() 함수를 호출하여 해제하는 것이 좋습니다. 기억.

또는 realloc() 함수를 호출하여 할당된 메모리 블록의 크기를 늘리거나 줄일 수 있습니다. realloc() 및 free() 함수를 사용하여 위의 예를 다시 살펴보겠습니다.

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){   char name[100];   char *description;

   strcpy(name, "Zara Ali");   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );   if( description == NULL )   {
      fprintf(stderr, "Error - unable to allocate required memory\n");   }   else   {
      strcpy( description, "Zara ali a DPS student.");   }   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );   if( description == NULL )   {
      fprintf(stderr, "Error - unable to allocate required memory\n");   }   else   {
      strcat( description, "She is in class 10th");   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );   /* 使用 free() 函数释放内存 */
   free(description);}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Name = Zara AliDescription: Zara ali a DPS student.She is in class 10th

추가 메모리를 재할당하지 않고도 시도해 볼 수 있습니다. 설명을 저장하는 데 사용할 수 있는 메모리가 부족하기 때문에 strcat() 함수에서 오류가 발생합니다.