C 實用技巧(二)

2021-12-30 00:33:33 字數 900 閱讀 1443

上一篇文章講到了如何檢查記憶體洩露。其實只要肯用c++的stl裡面的高階功能的話,記憶體洩露是很容易避免的。我在開發vczh library++ 3.0的時候,所有的測試用例都保證跑完了沒有記憶體洩露。但是很可惜有些c++團隊不能使用異常,更甚者不允許寫建構函式析構函式之類,前乙個還好,後乙個簡直就是在用c。當然有這些**規定的地方stl都是用不了的,所以我們更加需要紮實的基礎來開發c++程式。

一、錯誤覆蓋記憶體。

之前提到的不能隨便亂memset其實就是為了避免這個問題的。其實memcpy也不能亂用,我們來看乙個例子,最簡單的:

1 #define max_string 20;

2  3 struct student

4 ;大家對這種結構肯定十分熟悉,畢竟是大學時候經常要寫的作業題……好了,大家很容易看得出來這其實是c語言的經典寫法。我們拿到手之後,一般會先初始化一下,然後賦值。

1 student vczh;

2 memset(&vczh, 0, sizeof(vczh));

3 strcpy(vczh.name, "vczh");

4 strcpy(vczh.id, "vczhs id");

5 vczh.chinese=70;

6 vczh.math=90;

7 vczh.english=80;

為什麼要在這裡使用memset呢?memset的用處是將一段記憶體的每乙個位元組都設定成同乙個數字。這裡是0,因此兩個字串成員的所有位元組都會變成0。因此在memset了student之後,我們通過正常方法來訪問name和id的時候都會得到空串。而且如果student裡面有指標的話,0指標代表的是沒有指向任何有效物件,因此這個時候對指標指向的物件進行讀寫就會立刻崩潰。對於其他數值,0一般作為初始值也不會有什麼問題(double什麼的要小心)。這就是我們寫程式的時候使用memset的原因。

Linux 實用技巧

值得一提的是vim是慈善軟體 charityware 如有贊助或評比得獎,所得將全部救助烏干達孤兒,軟體使用是免費的,歡迎手頭有點閒錢的使用者捐款贊助,如果沒銀子也沒關係,至少當有評比活動時 有獎金可拿的那種 應用技巧一 快速注釋 1 連續行注釋 使用vim vi編輯shell指令碼,在進行除錯的時...

vim實用技巧

以前習慣於eclipse,sourceinsight,vim用的不是很熟悉,在現在的公司中,vim是一種必備的技巧,慢慢,從難受到得心應手,vim還是比較好用的,下面記錄一點實用的技巧 1 vim ctags cscope是乙個強大的比擬於sourceinsight的字元介面的工具 2 ctrl 跳...

SQL PowerDesigner實用技巧

1,name code的轉變 我們設計資料庫的時候,軟體會自動把name的資料複製到code中,但我想設計時直接把 欄位名稱與含義寫在name中,這樣對設計時間的浪費是很少的 如我們以 欄位名 中文含義 來寫name,讓軟體自動複製前面的 欄位名到 code中.讓中文函義 自動複製到 comment...