malloc()free()realloc()メモリの使用と解放に関する注意事項


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に書き込まれる.結果エラーが発生しました.