踏入軟體行業已一年有餘,感覺自己很菜,一直想把日常遇到的問題,以一種和合適的方式記錄下來,以供自勉,偶然和同事聊天,發現部落格這玩樣,開始中毒,於是「開壇做法」,留待自己閒暇時光溫故知新。
今偶遇一問題,讓自己頓覺開朗,寫下心得(話說這個真心感覺到面試過程中別人問引用之類的問題,很是不理解啊,現在有所領悟)。
表象:class cgisadapter
;定義這樣乙個業務類,需要對地圖進行一系列處理,使用方式如下:
int model_pointsanalysis(calparams* pcalparams, scmtrx* pscmtrx, trxnuminfo strtrxnuminfoneed, cgisadapter gisadapter, cstring resultfilefullname);
uint showfstcalthread(lpvoid pparam)
{int nerrorcode = -1;
/*獲取地圖資訊*/
cgisadapter gisadapter;
gisadapter.loadmaps(cprojectfile::getprojfilename());
.......//一系列操作
nerrorcode = model_pointsanalysis(pcalparams,
pscmtrx, strtrxnuminfoneed, gisadapter, resultfilefullname) ;
.......//一系列操作
return 0;
在退出showfstcalthread函式時,會呼叫cgisadapter類的析構函式,進行相應的記憶體釋放,這裡的表象是ingmapgeo* m_pdemmap; ingmapgeo* m_pdhmmap; ingmapgeo* m_pdsmmap; ingmapgeo* m_pdommap; ingmapgeo* m_ppopmap;在釋放這一系列指標時,程式會蹦;我的初始想法是記憶體重複釋放(當然也確實是重複釋放了) ;
現在來細細分析下:
當程式走到該行nerrorcode = model_pointsanalysis(pcalparams,
pscmtrx, strtrxnuminfoneed, gisadapter, resultfilefullname) ;針對gisadapter這個類物件實際上只是做了乙個形參和實參之間的乙個淺拷貝;在model_pointsanalysis函式中進行處理的實際上是該物件的乙個拷貝物件,這個拷貝物件和原始物件中ingmapgeo* m_pdemmap; ingmapgeo* m_pdhmmap; ingmapgeo* m_pdsmmap; ingmapgeo* m_pdommap; ingmapgeo* m_ppopmap;這些指標指向的位址都是相同的,所以在函式model_pointsanalysis結束時釋放了一次(析構中釋放),在showfstcalthread函式結束時又再次釋放了一次(析構中釋放),自然引起程式的崩潰。
解決這種問題,我初始想法進行深拷貝,保證形參和實參中gisadapter物件中的指標不是指向同一位址,這樣就不存在重複釋放的現象;但回過頭一想為啥不用引用的呢,這樣兩個函式中處理的物件在記憶體中只有乙份,不但不需要進行淺拷貝的動作提高效率,還能保障不會對同一位址多次釋放;
int model_pointsanalysis(calparams* pcalparams, scmtrx* pscmtrx, trxnuminfo strtrxnuminfoneed, cgisadapter& gisadapter, cstring resultfilefullname);
這樣乙個簡單的符號,解決多行**和程式效率的問題,很是值得學習,這裡也漸漸明白引用的功效了。(大牛看到次肯定會「呵呵」,哎,希望從這些點點滴滴開始積累,做個基礎紮實的「程式猿」)
論安全的重要性
論安全的重要性 安全 是乙個永不過時的話題。在我們的現實生活中,無數的事實告訴我們,凡是無視安全的行為必將付出慘痛的代價。世界上每天都在發生著安全事故,汽車超載,超速行駛,闖紅燈 生產單位偷工減料,違規操作 公共服務場所無視安全規範 種種無視安全的情況造成了一起又一起的安全事故。慘痛的教訓告訴我們任...
論溝通的重要性
溝通,是建立人際關係的橋梁,如果這個世界缺少了溝通,那將是乙個不可想象的世界。可以這樣說,沒有溝通就沒有人際的互動關係,人與人之間關係,就會處在僵硬 隔閡 冷漠的狀態,會出現誤解 扭曲的局面,給工作和生活帶來極大的害處。資訊時代的到來,工作 生活節奏越來越快,人與人之間的思想需要加強交流 社會分工越...
論特徵的重要性
特徵工程有多重要,可以引用一句話來表達 資料和特徵決定了模型的上限,演算法只是在幫忙逼近這個上限。好的特徵是決定乙個模型準確率的關鍵,那問題來了?什麼是特徵呢,特徵就是資料對於結果的一種描述。比如我們形容乙個人是否漂亮,那她的眼睛大小 鼻子的形狀 臉型都是特徵。通常,當獲得乙份結構化資料的時候,如果...