日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于释放内存的那点事

發(fā)布時(shí)間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于释放内存的那点事 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我在linux下編寫(xiě)了一個(gè)簡(jiǎn)單的測(cè)試程序,編譯可以通過(guò),但是運(yùn)行時(shí)報(bào)了“***?glibc?detected?***?free():?invalid?pointer:?0x0000007fbffffa44?***”錯(cuò)誤,我將錯(cuò)誤定位在free語(yǔ)句上,但是不知道為什么該語(yǔ)句會(huì)出錯(cuò)。請(qǐng)求各位幫忙。程序如下:
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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。