malloc関数の基本的な使用
malloc関数のプロトタイプは次のとおりです。
void *malloc( size_t size );
- サイズ:サイズはバイト単位でヒープ領域を適用することを約束しました
- 戻り値がvoid *型のポインタであり、メモリは、malloc関数の戻りスペースを得た最初のアドレスが割り当てられます
私たちは事前に知ることができないのmallocスペースので、void *型のポインタを使用するには、どのタイプを申請する理由。このように、一般的に我々は、ポインタ値の強力なターンを返す必要があります。
#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 );
あなたは私たちがするまで適用されます、無料の戻り値、パラメータを1つだけ見ることができないヒープメモリの最初のアドレスの自由缶に渡されます。
#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;
}