关于释放内存的那点事
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)
這樣就是操作錯誤的,內存發生了變化 ,不能釋放 注意啊?
總結
以上是生活随笔為你收集整理的关于释放内存的那点事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更改结构体的内存字节对齐方式--经典
- 下一篇: 1---结构体中最后一个成员为[0]长度