찾다
  • 로그인
  • 가입
비밀번호 재설정 성공

당신이 관심을 갖고 있는 프로젝트를 팔로우하고 그들에 관한 최신 뉴스를 맛보세요

C 메모리 관리

수집 205
읽다 91681
업데이트 시간 2016-09-11

이 장에서는 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() 함수에서 오류가 발생합니다.

핫 AI 도구
Undress AI Tool
Undress AI Tool

무료로 이미지를 벗다

AI Clothes Remover
AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undresser.AI Undress
Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

Stock Market GPT
Stock Market GPT

더 현명한 결정을 위한 AI 기반 투자 연구

인기 있는 도구
메모장++7.3.1
메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6
드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전
SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)