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。导致结果错误。