1.常見的記憶體錯誤及其對策
*記憶體未分配成功卻使用了它:
在使用記憶體之前檢查指標是否為null。如果指標p是函式的引數,那麼在函式的入口處用assert(p!=null)進行檢查 ;如果使用malloc或者new來申請記憶體,應該用if(p==null)或if(p!=null)進防錯處理。
*無論用何種方式建立陣列,都別忘了賦初值,即便是賦零值也不可省略,不要嫌麻煩。
*記憶體分配成功並且已經初始化,但操作越過了記憶體的邊界。
*記憶體洩露。動態記憶體的申請與釋放必須配對,申請與釋放的次數一定要想同。
*釋放了記憶體卻繼續使用它(三種情況):
(1)物件呼叫關係過於複雜。應重新設計資料結構,解決物件管理混亂局面
(2)函式注意不要返回指向「棧記憶體」的「指標」或者「引用」,該內存在函式體結束時會被銷毀
(3)使用free或delete釋放了記憶體後,沒有將指標設定為null。導致產生「野指標」。
2.指標與陣列的對比
*陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。陣列名對應著(而不是指向)一塊記憶體,其位址與容量在宣告週期內保持不變,只有陣列的內容可以改變。
3.修改內容
企圖修改常量字串的內容導致執行錯誤。
4.內容複製與比較
對陣列進行複製:strcpy();
對陣列進行比較:strcmp();
//指標
int len=strlen(a);
char *p=(char *)malloc(sizeof(char)*(len+1));
strcpy(p,a); //不要用p=a,
if(strcmp(p,a)==0) //不要用if(p==a),那是比較位址
關於C C 記憶體一點小知識
這裡室友拷了一段 過來除錯,這個過程中發現了一點由使用了未分配的記憶體造成的乙個問題,為此我花了一點時間來除錯問題的根源 如下 include include using namespace std int main if flag else return 0 答 破解上述加密的關鍵在於利用攻破st...
記憶體管理的一點事
引用計數 物件的每次建立,引用計數為1 方法 1 retain方法,每次呼叫引用計數加1,並且返回值是物件本身 2 release方法,物件引用計數減1,沒有返回值 3 retaincount方法,返回物件的引用計數 4 dealloc方法,當乙個物件被 的時候,會呼叫此方法,像是物件說臨終遺言的地...
一點小問題
header content type text html charset utf 8 fp fopen c 1.doc r fp1 fopen r fclose fp fclose fp1 filename c 33.txt 可能很多時候錯誤都不是在本行 fp3 fopen filename r ...