當前位置:
首頁 > 知識 > C加加編程中容易遇到的幾個問題

C加加編程中容易遇到的幾個問題

生命的獎賞遠在旅途終點,而非起點附近。我不知道要走多少步才能達到目標,踏上第一千步的時候,仍然可能遭到失敗。但我不會因此放棄,我會堅持不懈,直至成功!

1內存泄漏什麼原因?

程序最怕的就是出現內存泄漏,因為內存一旦出現泄漏,不但會造成系統內存的浪費,導致程序運行變慢甚至系統出現奔潰等後果;

造成內存泄漏的原因是程序中動態分配的堆內存因為一些原因,沒有被釋放,這種問題屬於遺漏缺陷而不是過錯缺陷,因此,要比其他內存非法訪問錯誤更加難以檢測,這種錯誤具備隱蔽性和累積性。

當程序出現泄漏時,程序的內存佔用會不斷增加,極端情況還會使得系統奔潰,例如,伺服器應用軟體在不斷運行,需要時刻接收來自客戶端的請求,如果處理一次請求都出現一定的泄漏,伺服器勢必會越來越慢。

想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙

造成這種情況的原因一般有:

1、使用new(),malloc(),GlobalAlloc()等函數分配的堆內存沒有使用相應的delete(),free(),GlobalFree()等函數釋放;

new()【屬於運算符,雖然它與malloc一樣都是申請動態內存,但是兩者有區別,new在實現上調用了malloc()函數,它除了分配內存還調用了構造函數】;

malloc()【標準庫函數,只負責分配內存,對於非內部數據類型的對象而言,簡單的只是調用malloc()將無法滿足動態對象的要求,因為該函數不能完成執行構造函數的要求】

GlobalAlloc()【Windows API函數,與前面兩個函數的作用一致,主要是為了與16位的Windows相兼容,因為在win32中不分全局棧和局部堆,因此在win32中不建議使用該函數】

2、繪圖時創建的GDI對象沒有釋放;

GDI是圖形設備介面(Graphics Device Interface, 或Graphical Device Interface)的簡稱,它是微軟公司的視窗操作系統(Microsoft Windows)的三大內核部件(也稱「子系統」)之一

3、創建的線程,窗口等句柄資源在失效後沒有被釋放。

Windows編程中,句柄是指使用的一個唯一的整數值,即一個4位元組(64位程序中為8位元組)長的數值,來標識應用程序中的不同對象和同類中的不同的實例,諸如,一個窗口,按鈕,圖標,滾動條,輸出設備,控制項或者文件等

補充一點

使用操作符new[]創建的數組對象,在結束的時候必須使用delete[]進行刪除,否則會出現內存泄漏;

2指針和引用有區別嗎?

指針和引用都可用於存放變數地址,但是這二者之間有很大區別,主要有三點:

1、指針從本質上講,是存放了一塊內存的地址,它本身從邏輯上是一個獨立的變臉,可以被改變,既可以改變指針自身變數,從而指向不同的地址,也可以改變改指針指向內存空間的內容兩方面;

2、引用是變數的一個別名,就像熟悉小明的朋友也可以叫他明,它在邏輯上是不能獨立存在的,具有依附性,因此引用必須在申明之時就被初始化,並且在對象的整個生命周期內是不能被改變的,即引用從始至終只能依附同一個變數。

3、引用不能為空,而指針卻可以。這裡警告兩點

警告兩點

1、引用只能定義時初始化,之後再不能改變;

2、無效指針要及時釋放其所指的內存空間,並將其賦予NULL,防止野指針的出現;

3如何判斷句柄所關聯的窗口是否存在

軟體開發過程中,時常需要判斷某個句柄所關聯的窗口是否存在,如何判斷呢?

在Windows操作系統中提供了一個用來判斷句柄關聯窗口是否存在的函數IsWindow(),如果句柄對應的窗口存在,函數返回True,否則返回False,示例如下:

······

//查找「W」窗口,如果找到,則返回句柄,如果沒有,則返回NULL

HWND hd=::FindWindow(NULL,"W");

if ( IsWindow(hd) )

AfxMessageBox("窗口找到了!");

······

這個問題雖然小,但是卻是經常被使用的,因為如果程序沒有判斷,從而獲取的是一個無效句柄,將有可能導致程序奔潰。

想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

C加加中命名空間的 5 個常見用法
C加加語言的由來及特點附計機器語言的由來
如何運行C語言C加加程序
C和C加加文本搜索中的精確匹配演算法上
c語言易忽略知識點之緩衝區,一起來了解一下吧

TAG:C加加 |

您可能感興趣

數字化轉型過程中遇到這些問題先別慌!
技術項目中BA最常遇到的的5大難題,你有遇到過嗎?
減肥瘦身過程中遇到的各種難題
文眼線遇到的一些問題以及價錢
12星座遇到前任加好友會有怎麼樣的反應?
裝修廚房會遇到一個很糾結的問題?
春節乘機最容易遇到的9大問題!
在做酸奶時會遇到哪些問題
美國最高山,遇到了嚴重的屎問題
能遇到一個合適的人不容易
誘導式訓練中,你一定會遇到的問題
你的新加坡PR、公民還沒批?肯定是遇到了這些問題……
關於健身,5個新手訓練最容易遇到的錯誤
DIY美甲過程中常常會遇到的問題,快來看看吧!
學習中遇到困難,遇到問題都很正常
說幾個占卜過程中遇到的讓人印象深刻的故事
談戀愛的時候都會遇到的五個問題,你中了幾個了?全中的舉手
新生兒百天內容易遇到的問題,以及注意事項有哪些
小白學PYTHON時最容易犯的6個錯誤,看一下你遇到過幾個
在做裝配系列蘋果切時遇到一些問題