С нуля видео -46-таНос и свободно

Основное использование таНос

Malloc прототип функции:

void *malloc( size_t size );
  • размер: размер обещал применить пространство кучи в байтах
  • Возвращаемое значение представляет собой указатель типа пустот *, память будет присвоен первый адрес, полученный таНос возвращает пространство

Причина, почему использование типа ничтожного * указатель, потому что таНос пространства мы не можем заранее знать, как применить для данного типа. Таким образом, в целом мы должны вернуть значение указателя сильный ход.

#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;
}

Но будьте осторожны, если он будет принят в свободный адрес не запрошенной до кучи адреса памяти, возникает ошибка.

с использованием таНос SizeOf

На практике, таНос SizeOf с общим использованием, чтобы увеличить читаемость кода.

#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
рекомендация