malloc 与free

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *p, i;
	
    p = (int *)malloc(6 * sizeof(int)) ;
    p++;
   
    free(p);   //此处报错误,原因是:对p做p++和一般的int *自加没有区别 都是指针移动sizeof(int)的值,但是 除非你保存了原始的p值 或者可以通过计               // 算找回p的原始值(malloc的返回值),否则这段内存无法释放,如果加上free(p),就会报错   
     p=NULL;
	
    return 0;
}


 

注意:p是一个指针

对p做p++和一般的int *自加没有区别 都是指针移动sizeof(int)的值,但是 除非你保存了原始的p值 或者可以通过计算找回p的原始值(malloc的返回值),否则这段内存无法释放,如果加上free(p),就会报错  

 

如下面,就正确:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *p, i;
	
    p = (int *)malloc(6 * sizeof(int)) ;
 	
   *p=5;
    printf("%2d", *p);
    free(p);   
     p=NULL;
	
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值