каталог
Основное использование таНос
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;
}