C 제로 기반의 비디오 -46-의 malloc 무료

의 malloc의 기본 사용

의 malloc 함수 프로토 타입은 다음과 같습니다

void *malloc( size_t size );
  • 크기 : 크기는 바이트 힙 공간을 적용하기로 약속
  • 리턴 값은 타입 공극 *의 포인터, 메모리 주소는 제 수득 malloc에 ​​복귀 공간을 할당 할 것이다

우리가 사전에 알 수 없다 malloc에 ​​공간이 있기 때문에 형 무효 * 포인터의 사용 방법 유형에 대해 적용하는 이유. 따라서, 일반적으로 우리는 포인터 값 강한 차례를 반환해야합니다.

#include <stdlib.h>

int main(int argc, char* argv[])
{
    //申请4字节的空间,作为存储int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(4);

    //修改值
    *pValue = 0x11111111;
    return 0;
}

우리는 또한 동시에 주소 공간 하나 개 이상의 요소에 적용 할 수 있습니다 :

int main(int argc, char* argv[])
{
    //申请12字节的空间,作为存储3个int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(12);

    //修改值
    *pValue = 0x11111111;
    *(pValue+1) = 0x22222222;
    *(pValue+2) = 0x33333333;
    return 0;
}

무료 기본 사용

무료 함수 프로토 타입은 다음과 같습니다

void free( void *memblock );

당신은 볼 수없는 반환 값, 하나 개의 매개 변수를 확보 할 수 없다, 우리는 때까지 적용됩니다 힙 메모리 첫 번째 주소 확보 할 수 있습니다에 전달.

#include <stdlib.h>

int main(int argc, char* argv[])
{
    //申请12字节的空间,作为存储3个int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(12);

    //修改值
    *pValue = 0x11111111;
    *(pValue+1) = 0x22222222;
    *(pValue+2) = 0x33333333;

    free(pValue);
    return 0;
}

메모리 주소를 힙에 앞서 요구하지 않는 무료 주소로 전달한다면,주의, 오류가 발생합니다.

사용의 malloc를 sizeof와

실제로, 일반적인 사용과는 sizeof의 malloc은, 코드의 가독성을 높일 수 있습니다.

#include <stdlib.h>

int main(int argc, char* argv[])
{
    //申请12字节的空间,作为存储3个int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(sizeof(int)*3);

    //修改值
    *pValue = 0x11111111;
    *(pValue+1) = 0x22222222;
    *(pValue+2) = 0x33333333;
    return 0;
}

메모리 누수 문제

힙 메모리뿐만 아니라 릴리스를 신청하면, 자원 누수의 원인이됩니다.
어떤 경우에는, 비표준 코드의 자원의 출시로 이어질 수 없기 때문에 :

void MyFun()
{
    int* pValue = (int*)malloc(12);

    //修改值
    *pValue = 0x11111111;
    *(pValue + 1) = 0x22222222;
    *(pValue + 2) = 0x33333333;
}

int main(int argc, char* argv[])
{
    MyFun();
    return 0;
}

추천

출처www.cnblogs.com/shellmad/p/11695697.html