关于释放内存的那点事
int?main()
{
????char?*A="hello?world";
????char?*B;
????B?=?(char*)malloc(strlen(A)+1);
????B?=?A;
????free(B);
????return?0;
}
A是字符串常量,B=A的地址,freeB,就相當(dāng)于freeA,當(dāng)然釋放不掉,而且申請(qǐng)的動(dòng)態(tài)空間,沒(méi)有被釋放,內(nèi)存泄露啦
free ?只能釋放自己malloc的 內(nèi)存
注意 ?memcpy函數(shù) 進(jìn)行內(nèi)存操作的時(shí)候 會(huì)出現(xiàn)的問(wèn)題
#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.結(jié)構(gòu)體指針的成員指針同樣需要初始化*/ ?
?34 // ? ? ?memset(ss->d,0,10*sizeof()) ? ??
?35?
?36 ? ? ? ? memcpy(cmd_a.d,b,10*sizeof(unsigned char));
對(duì) memcpy 進(jìn)行拷貝之后
free(cmd_a.d)
這樣就是操作錯(cuò)誤的,內(nèi)存發(fā)生了變化 ,不能釋放 注意啊?
總結(jié)
以上是生活随笔為你收集整理的关于释放内存的那点事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 更改结构体的内存字节对齐方式--经典
- 下一篇: 1---结构体中最后一个成员为[0]长度