內(nèi)存管理心得:
- 每個(gè) malloc 都要有一個(gè)對(duì)應(yīng)的 free
- 每當(dāng)向指針寫入值時(shí),都要確保對(duì)可用字節(jié)數(shù)和所寫入的字節(jié)數(shù)進(jìn)行交叉核對(duì)
- 在對(duì)指針賦值前非春,要確保沒(méi)有內(nèi)存位置會(huì)變?yōu)楣铝⒌?/li>
- 每當(dāng)釋放結(jié)構(gòu)化的元素(而該元素又包含指向動(dòng)態(tài)分配的內(nèi)存位置的指針)時(shí),都應(yīng)首先遍歷子內(nèi)存位置并從那里開始釋放茁计,然后再遍歷回父節(jié)點(diǎn)
- 始終正確處理返回動(dòng)態(tài)分配的內(nèi)存引用的函數(shù)返回值
- 確保您不是在訪問(wèn)空指針
- vector.erase(iter)之前注意釋放(*iter)中的堆內(nèi)存
- 遇到return語(yǔ)句時(shí)怀骤,注意檢查return之前是否有申請(qǐng)的空間未釋放,如果有則將其先釋放介返,再return
- 涉及到字符串拷貝時(shí)統(tǒng)一使用 char dest[1024]; memset(dest, 0, 1024); strncpy(dest, src, sizeof(dest) - 1 );
- 涉及到字符串拷貝時(shí)統(tǒng)一使用 char dest[1024]; memset(dest, 0, 1024); snprintf(dest, sizeof(dest) - 1, "%s", "hello world");
- 共享資源在多個(gè)地方被訪問(wèn)時(shí)拴事,注意要加鎖沃斤,但鎖不能連續(xù)兩次加
- 內(nèi)存分配未成功卻使用了它
- 內(nèi)存分配成功,但未初始化就使用它
- 內(nèi)存分配成功且已初始化,但操作越過(guò)了邊界
- 忘記釋放內(nèi)存
- 釋放了內(nèi)存卻繼續(xù)使用它:
- 程序中對(duì)象的關(guān)系過(guò)于復(fù)雜,難以搞清哪個(gè)對(duì)象是否已經(jīng)釋放了內(nèi)存
- 函數(shù)中return寫錯(cuò),返回了指向棧中的指針或引用
- ree或delete后,沒(méi)有將指針設(shè)為NULL,產(chǎn)生”野指針
-- 2018/05/26
-- 魔都