malloc() free() realloc()内存使用与释放注意事项

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值