关于释放内存的那点事

我在linux下编写了一个简单的测试程序,编译可以通过,但是运行时报了“*** glibc detected *** free(): invalid pointer: 0x0000007fbffffa44 ***”错误,我将错误定位在free语句上,但是不知道为什么该语句会出错。请求各位帮忙。程序如下:
int main()
{
    char *A="hello world";
    char *B;
    B = (char*)malloc(strlen(A)+1);
    B = A;
    free(B);
    return 0;

}



A是字符串常量,B=A的地址,freeB,就相当于freeA,当然释放不掉,而且申请的动态空间,没有被释放,内存泄露啦

free  只能释放自己malloc的 内存


注意  memcpy函数 进行内存操作的时候 会出现的问题

#pragma pack (1) 
  6 struct cmd
  7 {
  8         unsigned short sign0;
  9         unsigned short crc;
 10         unsigned int addr;
 11         unsigned  char cmd;
 12         unsigned char *d;
 13 };
 14 #pragma pack () 
 15 
 16 
 17 int main()
 18 
 19 {
 20         unsigned char b[10]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};
 21 
 22         int i;
 23         struct cmd  cmd_a;
 24 //      unsigned char *p;
 25 
 26 
 27         cmd_a.d=(unsigned  char *)malloc(15*sizeof(unsigned char));
 28         memset(cmd_a.d,0,15*sizeof(unsigned char));
 29 
 30 //      ss=(struct cmd*)malloc(sizeof(struct cmd));
 31 //      memset(ss,0,sizeof(struct cmd));
 32 
 33 //       ss->d= (unsigned char*)malloc(10*sizeof(unsigned char));/*3.结构体指针的成员指针同样需要初始化*/  
 34 //      memset(ss->d,0,10*sizeof())     
 35 
 36         memcpy(cmd_a.d,b,10*sizeof(unsigned char));


对 memcpy 进行拷贝之后

free(cmd_a.d)

这样就是操作错误的,内存发生了变化 ,不能释放 注意啊 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值