malloc()free()realloc()メモリの使用と解放に関する注意事項
1、ヘッダファイル:
#include“stdio.h”#include//メモリ関数相関#include//memset()strcpy()関数相関
2、メモリの例:
3、free()は、このブロックのメモリフラグビットを未割当て状態に設定したが、メモリデータは変更されていない.すなわち、このメモリに以前に書かれたデータは変更されていない.
メモリを解放すると、次のプログラムでメモリを再割り当てすると、他のスレッドに割り当てるために計算されます.
free()以降、このメモリへのポインタpArrayは変更されず、このメモリを指します.だからNULLに設定します.そうでなければ、このメモリが再割り当てされた後も、pArrayを操作するコードは、このメモリのデータを変更することができます.
その結果,新しいコードが0に書き込まれ,pArrayを操作するコードが1に書き込まれる.結果エラーが発生しました.
#include“stdio.h”#include//メモリ関数相関#include//memset()strcpy()関数相関
2、メモリの例:
#include "stdio.h"
#include
#include
struct __TEST
{
int a;
int b;
};
int main(void)
{
__TEST *pArray;
int n=1;
int len=0;
len = sizeof(__TEST );
pArray= (__TEST *)malloc(len*n); //
memset(pArray,0,len);// 0
//
pArray[0].a = 1;
pArray[0].b = 1;
pArray= (__TEST *)realloc(pArray,len*(n+1)); //
memset(pArray+len,0,len);// 0,
printf("pArray[1].a=%d,pArray[1].b=%d\r
",pArray[1].a,pArray[1].b);
//
pArray[1].a = 2;
pArray[1].b = 2;
for(n=0;n<2;n++)
{
printf("pArray[%d].a=%d,pArray[%d].b=%d\r
",n,pArray[n].a,n,pArray[n].b);
}
free(pArray); //
pArray = NULL;
return 0;
}
3、free()は、このブロックのメモリフラグビットを未割当て状態に設定したが、メモリデータは変更されていない.すなわち、このメモリに以前に書かれたデータは変更されていない.
メモリを解放すると、次のプログラムでメモリを再割り当てすると、他のスレッドに割り当てるために計算されます.
free()以降、このメモリへのポインタpArrayは変更されず、このメモリを指します.だからNULLに設定します.そうでなければ、このメモリが再割り当てされた後も、pArrayを操作するコードは、このメモリのデータを変更することができます.
その結果,新しいコードが0に書き込まれ,pArrayを操作するコードが1に書き込まれる.結果エラーが発生しました.