C 언어에서 동적 메모리 할당을 구현하는 방법

angryTom
풀어 주다: 2020-02-20 11:43:00
원래의
5045명이 탐색했습니다.

C 언어에서 동적 메모리 할당을 구현하는 방법

C언어에서 동적 메모리 할당을 구현하는 방법

우리는 프로그램을 위해 메모리 공간을 미리 열어두고 운영하는 경우가 많습니다.

int arr[5] ;
로그인 후 복사

이 배열의 경우 정의할 때 미리 공간을 열어두어야 하며, 프로그램 실행 중에 이 할당된 메모리 공간은 함수가 완료될 때까지 공간이 해제되지 않는 한 항상 존재하게 됩니다. 한 가지 문제는 이 배열을 프로그램에서 수정할 수 없다는 것입니다.

이러한 문제로 인해 사용에 불편함이 있어 C에서는 malloc() 함수를 제공하고 있습니다.

malloc() 함수와 관련하여 이 함수는 하나의 매개변수, 즉 필요한 메모리 바이트 수를 허용합니다. 그런 다음 malloc()은 사용 가능한 메모리에서 적절한 크기의 블록을 찾습니다. 이 프로세스에서 malloc()은 해당 메모리의 첫 번째 바이트 주소를 반환할 수 있습니다. 즉, 포인터를 사용하여 작업할 수 있다는 의미입니다. malloc()은 배열 포인터, 구조체 포인터 등을 반환하는 데 사용할 수 있으므로 반환 값의 유형을 적절한 유형에 할당해야 합니다. malloc()이 필요한 공간을 찾을 수 없으면 널 포인터를 반환합니다.

예:

추천 학습: c 언어 비디오 튜토리얼

double *p;
p=(double*)malloc(30*sizeof(double));
로그인 후 복사

이 프로그램에서는 먼저 이중 문자 공간 30개를 열고 p가 이 공간의 위치를 ​​가리킵니다. 여기의 포인터는 첫 번째 double 값을 가리킵니다. 우리가 열어놓은 30개의 이중 공간이 전부는 아닙니다. 이는 배열과 같습니다. 배열에 대한 포인터는 전체 배열의 요소가 아닌 배열의 첫 번째 요소 주소를 가리킵니다. 따라서 여기서의 작업은 배열의 경우와 동일합니다.

p[0]은 첫 번째 요소이고 p[1]은 두 번째 요소입니다.

이제 동적 배열을 선언하는 방법을 익힐 수 있습니다.

int arr[n];
p=(int *)malloc(n*sizeof(int));
//我们在这里使用的时候要元素个数乘类型字节长度,这样就达到了动态开辟内存空间。
로그인 후 복사

malloc()을 사용하여 메모리 공간을 연 후에 고려해야 할 것은 메모리 공간을 해제하는 것뿐입니다. 여기서 C는 free() 함수를 제공합니다. free()의 매개변수는 이전 malloc() 함수에 의해 열린 공간을 해제하는 malloc() 함수에 의해 반환된 주소입니다.

예:

위에서 열었던 공간을 해제하려면 이렇게 하면 됩니다.

free(p);
로그인 후 복사

프로그램은 또한 메모리 할당이 실패할 때 프로그램을 종료하는 exit() 함수를 호출합니다.

프로그램 예:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>//malloc()函数被包含在malloc.h里面
#include<stdlib.h>
int main(void)
{
    char*a = NULL;//声明一个指向a的char*类型的指针
    a = (char*)malloc(100 * sizeof(char));//使用malloc分配内存的首地址,然后赋值给a
    if (!a)//如果malloc失败,可以得到一些log
    {
        perror("malloc");
        return-1;
    }
    sprintf(a, "%s", "HelloWorld\n");//"HelloWorld\n"写入a指向的地址
    printf("%s\n", a);//输出用户输入的数据
    free(a);//释放掉使用的内存地址
    system("pause");
    return 0;//例2有无内存泄露?
}
로그인 후 복사

이 프로그램은 주로 잘못된 malloc 반환 값 조건을 감지하는 데 사용됩니다.

여기서 C에서 유형 할당(char *)은 선택 사항이지만 C++에서는 필수이므로 유형 할당을 사용하면 C 프로그램을 C++로 포팅하는 것이 더 쉬워집니다.

프로그램 유연성을 얻으려면 주로 동적 배열을 사용하세요. 필요한만큼 배열을 만들 수 있습니다. 공간을 낭비할 필요가 없습니다.

더 많은 프로그래밍 입문 튜토리얼을 보려면 PHP 중국어 웹사이트를 주목하세요!

위 내용은 C 언어에서 동적 메모리 할당을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿