1、頭文件:
#include "stdio.h"
#include <stdlib.h> //內存函數相關
#include <string.h> //memset() strcpy()函數相關
2、內存範例:
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
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\n",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",n,pArray[n].a,n,pArray[n].b);
}
free(pArray); //釋放內存
pArray = NULL;
return 0;
}
3、free() 是將此塊內存標誌位設爲未分配狀態,但內存數據並未改變,即之前寫在這塊內存上的數據沒變。
釋放內存後,下次程序重新分配內存時,會將此塊內存囊括其中進行計算,用於分配給其它線程使用
free()之後,指向此塊內存的指針pArray並未改變,依舊指向這塊內存。所以要將其設爲NULL。否則這塊內存重新分配後,操作pArray的代碼依舊可以改變這塊內存的數據。
後果就是新代碼寫入0,操作pArray的代碼又將其寫爲1。導致結果錯誤。