亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法

文檔序號:6638533閱讀:255來源:國知局
一種航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法
【專利摘要】本發(fā)明公開了一種航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法。在航管訓(xùn)練系統(tǒng)中運(yùn)行一個Qt程序內(nèi)存使用的靜態(tài)檢查程序,運(yùn)行時將被檢查的代碼所在的目錄作為運(yùn)行參數(shù)。檢測在5個模塊中進(jìn)行:遍歷工程目錄和子目錄下的所有.cpp和.h文件,全路徑保存為string類型存放到cpp_file中;按行讀取文件每行信息,解析new和delete語句,得到Qt控件對象的創(chuàng)建信息和所有對象的刪除信息;解析得到的Qt對象的創(chuàng)建信息存放在newOBJMap中,刪除信息存放在deleteOBJMap中;遍歷newOBJMap中的每個元素,在deleteOBJMap中查找對應(yīng)的元素,存在對應(yīng)元素將信息合并存放QtObjectMap中,檢測結(jié)果輸出到日志文件或控制臺。有效解決了航管訓(xùn)練系統(tǒng)因Qt特殊性帶來的內(nèi)存泄露問題,大幅提高系統(tǒng)安全性、可靠性和實(shí)用性。
【專利說明】一種航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法 一、 所屬【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及航管訓(xùn)練系統(tǒng),特別涉及使用Qt開發(fā)的航管系統(tǒng)用戶界面程序的內(nèi) 存使用靜態(tài)檢查。 二、

【背景技術(shù)】
[0002] 航管訓(xùn)練系統(tǒng)除了仿真核心程序以外,還需要大量用戶界面程序完成數(shù)據(jù)準(zhǔn)備、 模擬飛行員操作、受訓(xùn)管制員席位等。在大型的航管訓(xùn)練系統(tǒng)進(jìn)行長時間的、復(fù)雜流程的訓(xùn) 練活動時,對人機(jī)界面的穩(wěn)定運(yùn)行提出了較高的要求,如不能出現(xiàn)內(nèi)存泄露、不能中途異常 退出等。本方法對使用QT開發(fā)的人機(jī)界面進(jìn)程的源碼提供靜態(tài)檢查機(jī)制,方便開發(fā)人員檢 查錯誤,及時修正缺陷。
[0003] Qt是1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架,Qt 庫中很多類都以QObject作為他們的基類,QObject的對象總是以樹狀結(jié)構(gòu)組織自己。當(dāng) 我們創(chuàng)建一個QObject對象時,可以指定其父對象(也被稱為父控件),新創(chuàng)建的對象將被 加入到父對象的子對象(也被稱為子控件)列表中。當(dāng)父對象被析構(gòu)時,這個列表中的所 有對象會被析構(gòu)。不但如此,當(dāng)某個QOb ject對象被析構(gòu)時,它會將自己從父對象的列表中 刪除,以避免父對象被析構(gòu)時再次析構(gòu)自己。
[0004] 由于QObject對象具有上述析構(gòu)功能,當(dāng)我們使用new操作符在堆中創(chuàng)建Qobject 對象時,并不需要使用delete操作符析構(gòu)它們。
[0005] 所以編寫Qt程序時,開發(fā)人員很容易寫出內(nèi)存處理不適當(dāng)?shù)某绦驅(qū)е聝?nèi)存泄露。 三、


【發(fā)明內(nèi)容】

[0006] 本發(fā)明的目的旨在解決航管訓(xùn)練系統(tǒng)開發(fā)中使用Qt開發(fā)人機(jī)界面中,由于Qt程 序特殊性可能帶來的內(nèi)存泄露問題。
[0007] 本發(fā)明的目的是這樣達(dá)到的:一種航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存靜態(tài)檢查方 法,其特征在于:在航管訓(xùn)練系統(tǒng)中運(yùn)行一個Qt程序內(nèi)存使用靜態(tài)的檢查程序,該程序運(yùn) 行時將被檢查的代碼所在的目錄作為運(yùn)行參數(shù),目錄可以有子目錄,得到檢測結(jié)果后,將 監(jiān)測結(jié)果輸出到日志文件或控制臺。
[0008] 本方法專門針對Qt程序中兩種Qt專屬的兩種內(nèi)存泄露情況提供檢查能力:Qt控 件對象沒有父控件,在堆中new 了這個對象;Qt控件對象有父控件。
[0009] 檢測在如下5個模塊中進(jìn)行:
[0010] 1)、遍歷工程目錄和子目錄下的所有后綴名為· CPP和· h文件,把文件全路徑保存 為string類型,再存放到vector類型的cpp_file中;
[0011] 2)、遍歷cpp_file中的每個文件,按行讀取文件每行信息,解析new和delete語 句,得到Qt控件對象的創(chuàng)建信息和所有對象的刪除信息;
[0012] 3)、解析得到的Qt控件對象的創(chuàng)建信息存放在newOBJMap中,所有對象的刪除信 息存放在deIeteOBJMap中;
[0013] 4)、遍歷newOBJMap中的每個元素,在deleteOBJMap中查找對應(yīng)的元素,如果存在 對應(yīng)元素,則將信息合并,存放在QtObjectMap中;
[0014] 5)、遍歷QtObjectMap中每個元素,得到檢測結(jié)果,輸出到日志文件或控制臺。
[0015] 所述在1)模塊中進(jìn)行的檢測,是通過Windows系統(tǒng)提供的_findfirst ()和_ findnext ()函數(shù)遍歷某個工程文件下的所有文件,并把.h和.cpp文件全路徑名存放在一個 Vector類型的cpp_file中,具體步驟是:
[0016] 開始,第一步,控制臺獲取工程目錄,第二步,判斷findfrist獲取當(dāng)前目錄下第一 個實(shí)例句柄,句柄值為-IL ?是,結(jié)束,否,第三步,findnext根據(jù)_findfirst獲得的句柄遍歷 目錄下的所有實(shí)例,判斷返回值是否為〇 ?是,結(jié)束,否,進(jìn)入第四步,判斷此實(shí)例為子文件 夾嗎?是,當(dāng)前目錄鏈接文件夾名字得到新的目錄,返回第二步,否,進(jìn)入第五步,判斷此實(shí) 例為· cpp或· h文件嗎?是,第六步,將· cpp和· h文件的全名保存到vector類型的cpp_ file中,返回第三步。
[0017] 所述在模塊2)中進(jìn)行的檢測具體步驟是:
[0018] 開始,第一步,判斷文件結(jié)束?是,結(jié)束,否,第二步,讀取每行文本,保存在string 類型的line中,第三步,判斷l(xiāng)ine為注釋嗎?是,結(jié)束,否,進(jìn)入第四步,判斷是line為new 或delete語句?否,進(jìn)入第五步,判斷是new語句?是,解析line得到的刪除對象信息,文 件位置更信息,并將得到的信息保存在deleteOBJMap中,返回第一步;是new語句,進(jìn)入第 六步,解析語句獲得創(chuàng)建對象的類別,第七步,根據(jù)類別判斷為Qt空間類?不是,結(jié)束,是, 第八步,將解析得到的Qt控件,父控件,文件位置信息保存到newOBJMap中,返回第一步。
[0019] 所述在模塊4)中進(jìn)行的檢測具體步驟是:
[0020] 開始,第一步,判斷newOBJMap結(jié)束?是,結(jié)束,否,第二步,獲取newOBJMap的下一 元素,第三步,判斷在deleteOBJMap中找到對應(yīng)元素?是,第四步,將這兩個元素合并,保 存到QtObjectMap,結(jié)束;否,把newOBJMap信息保存到QtObjectMap中,無刪除信息補(bǔ)空, 回復(fù)到第一步。
[0021] 所述在模塊2)進(jìn)行的檢測具體步驟中第三步,判斷l(xiāng)ine是否為注釋識別對象分 為兩種://行注釋,/**/段注釋,注釋和代碼區(qū)別對待,設(shè)置一個bool變量result區(qū)別該 行代碼是不是注釋即可,Result由解析代碼的函數(shù)返回值更新;
[0022] 若為行注釋,直接跳過該行即可,并設(shè)result為commentEnd,表示注釋結(jié)束;若為 段注釋,且沒有在一行中同時出現(xiàn)/*和*/,則result值為commentBegin,表示注釋開始; 若在一行中同時出現(xiàn)/*和*/,則result值為commentEnd,表示注釋結(jié)束;
[0023] 解析每行代碼時,根據(jù)result值選擇不同的解析函數(shù),parseCommentO為解析注 釋的函數(shù),ParseCodeO為解析代碼的函數(shù);
[0024] 第七步中,根據(jù)類別判斷為Qt空間類識別對象時分為兩步:
[0025] (1)識別出程序中創(chuàng)建對象的語句;
[0026] (2)判斷識別出的對象是不是Qt對象:Qt控件所屬的類都是有繼承關(guān)系的,且最 終的父對象都為QWidget,針對這種繼承樹的關(guān)系,通過讀取InheritTree. ini配置文件建 立一個樹的結(jié)構(gòu),樹結(jié)構(gòu)提供了一個接口:findChild(string key,P0INTER*p),返回值為指 針p指向樹中關(guān)鍵字為key的結(jié)點(diǎn),如果樹中不存在關(guān)鍵字為key的結(jié)點(diǎn),則p的值為NULL, 把某個類名作為實(shí)參傳給key,可判斷此類是不是Qt的控件類了,即能判斷對象的對象是 不是Qt控件對象。
[0027] 本發(fā)明的積極效果是:有效解決了航管訓(xùn)練系統(tǒng)開發(fā)中,使用Qt開發(fā)人機(jī)界面 時,因 Qt特殊性可能帶來的內(nèi)存泄露問題,保證系統(tǒng)的安全。由于本發(fā)明方法檢測后得到 的結(jié)果,輸出到日志文件或控制臺,開發(fā)人員可及時方便地發(fā)現(xiàn)問題,及時修正缺陷。對提 高航管訓(xùn)練系統(tǒng)自身的可靠性和實(shí)用性有非?,F(xiàn)實(shí)的積極意義。 四、

【專利附圖】

【附圖說明】
[0028] 圖1是本發(fā)明Qt程序內(nèi)存使用靜態(tài)檢測軟件模塊組成圖。
[0029] 圖2是在模塊掃描工程所有· cpp和· h文件流程圖。
[0030] 圖3是讀inheritTree. ini配置文件生成Qt控件類的繼承樹示意圖。
[0031] 圖4是解析每個文件流程圖。
[0032] 圖 5 是合并 newOBJMap 和 deIeteOBJMap 流程圖。 五、

【具體實(shí)施方式】
[0033] 本發(fā)明專門針對航管訓(xùn)練系統(tǒng)開發(fā)中使用Qt進(jìn)行人機(jī)界面開發(fā)的程序進(jìn)行靜態(tài) 檢查而研究的新方法,解決Qt程序開發(fā)中產(chǎn)生的內(nèi)存泄露問題。
[0034] 技術(shù)實(shí)現(xiàn)的總思路是專門針對Qt開發(fā)中兩種Qt專屬的兩種內(nèi)存泄露情況提供檢 查能力:
[0035] 本方法專門針對Qt開發(fā)中兩種Qt專屬的兩種內(nèi)存泄露情況提供檢查能力:
[0036] Qt控件對象若沒有父控件,如果在堆中new 了這個對象,那么必須編碼實(shí)現(xiàn)刪除, 否則會有內(nèi)存泄露;
[0037] Qt控件對象有父控件,此時無需程序員手動delete這個Qt控件,因?yàn)楦缚丶谖?構(gòu)時,會自動析構(gòu)自己的子控件列表里的控件,這是Qt提供的自動內(nèi)存機(jī)制,而程序員可 能誤寫刪除代碼,造成內(nèi)存泄露。
[0038] 除此之外還有其他屬于C++語言使用的中內(nèi)存泄露和冗余delete的情況,該方法 沒有涉及這些情況的檢測。
[0039] 本方法由幾個模塊組成,如圖1所示。
[0040] 在模塊1中,通過Windows系統(tǒng)提供的_findfirst()和_1^(111611:〇函數(shù)遍歷工程目 錄和子目錄下的所有.cpp和.h文件,把文件全路徑保存為string類型,再存放到vector 類型的cpp_file中。
[0041] 具體步驟是見附圖2:
[0042] 開始,第一步,控制臺獲取工程目錄,第二步,判斷findfrist獲取當(dāng)前目錄下第一 個實(shí)例句柄,句柄值為-IL ?是,結(jié)束,否,第三步,,findnext根據(jù)_findfirst獲得的句柄遍歷 目錄下的所有實(shí)例,判斷返回值是否為〇 ?是,結(jié)束,否,進(jìn)入第四步,判斷此實(shí)例為子文件 夾嗎?是,當(dāng)前目錄鏈接文件夾名字得到新的目錄,返回第二步,否,進(jìn)入第五步,判斷此實(shí) 例為· cpp或· h文件嗎?是,將· cpp和· h文件的全名保存到vector類型的cpp_file中, 返回第三步。
[0043] 在模塊2中,遍歷cppjile中的每個文件,按行讀取文件每行信息,解析new和 delete語句,得到Qt控件對象的創(chuàng)建信息和所有對象的刪除信息。
[0044] 解析文件中的new和delete語句時,對于某一文件,用getLineO獲取文件中的 每一行代碼。
[0045] 解析過程見圖4,具體步驟是:
[0046] 開始,第一步,判斷文件結(jié)束?是,結(jié)束,否,第二步,讀取每行文本,保存在string 類型的line中,第三步,判斷l(xiāng)ine為注釋嗎?是,結(jié)束,否,進(jìn)入第四步,判斷是line為new 或delete語句?否,進(jìn)入第五步,判斷是new語句?是,解析line得到的刪除對象信息,文 件位置更信息,并將得到的信息保存在deleteOBJMap中,返回第一步;是new語句,進(jìn)入第 六步,解析語句獲得創(chuàng)建對象的類別,第七步,根據(jù)類別判斷為Qt空間類?不是,結(jié)束,是, 第八步,將解析得到的Qt控件,父控件,文件位置信息保存到newOBJMap中,返回第一步。
[0047] 對于識別注釋部分和非注釋部分:
[0048] 注釋分兩種//行注釋,/**/段注釋,注釋和代碼是要區(qū)別對待的,設(shè)置一個bool 變量result區(qū)別該行代碼是不是注釋即可。Result由解析代碼的函數(shù)返回值更新。
[0049] 若為行注釋,直接跳過該行即可,并設(shè)result為commentEnd(表示注釋結(jié)束)。若 為段注釋,且沒有在一行中同時出現(xiàn)/*和*/,則result值為commentBegin (表示注釋開 始)。若在一行中同時出現(xiàn)/*和*/,則result值為commentEnd(表示注釋結(jié)束)。
[0050] 解析每行代碼時,根據(jù)result值選擇不同的解析函數(shù)parseCo_ent ()(解析注釋 的函數(shù)),parseCode ()(解析代碼的函數(shù))。
[0051] 對于識別QT控件對象分為兩步:
[0052] (1)識別出程序中創(chuàng)建對象的語句
[0053] 通過對Qt程序的了解,創(chuàng)建Qt控件對象一般是這種結(jié)構(gòu)。
[0054] 例如:
[0055] QPushButon m_button = new QPushButton(Parent);
[0056] 此行代碼最有標(biāo)志性的詞就是new和'=' 了,并且應(yīng)該是一個獨(dú)立的new這個關(guān) 鍵字,要排除***new***這種情況。
[0057] 首先,要從這行代碼中獲取的信息是:對象名(m_button),類名(QPushButton), 父對象(parent)。
[0058] 思路是通過"=","new","來獲取每個標(biāo)識符的begin(第一個字符在整行 string中的索引),end (最后一個字符在整行string中的索引)。然后通過begin和end 即可獲得每個標(biāo)示符。
[0059] C++中string類提供了很多接口可以直接使用。Substr (begin, Ien)用來截取子 串,find( "arg")用來尋找索引值,這兩個函數(shù)的配合使用可完成上述功能。
[0060] (2)判斷識別出的對象是不是Qt控件對象
[0061] 考慮到要識別所有的Qt控件對象,是一個繁雜的工作,所以只是找了一些常用的 Qt控件對象,以供識別。但是這不是固定的,如果有新的需要的話,可以在InheritTree. ini配置文件里手動添加新的對象。
[0062] Qt控件所屬的類都是有繼承關(guān)系的,且最終的父對象都為QWidget,針對這種繼 承樹的關(guān)系,建立了一個樹的結(jié)構(gòu),樹結(jié)構(gòu)的建立是通過讀取InheritTree. ini配置文件 建立的。
[0063] InheritTree. ini 文件結(jié)構(gòu)不例:
[0064] [樹的高度]
[0065] depthNum = η
[0066] [高度 0]
[0067] NodeNum = 1//當(dāng)前高度下結(jié)點(diǎn)數(shù)目
[0068] QWidget = NULL//等號左邊是空間類,右邊是起父類
[0069] [高度 1]
[0070]
[0071] [高度 n-1]
[0072]
[0073] 樹結(jié)構(gòu)提供了 一個接口,findChild (std: : string key,,TreeNodePointer*p),入 口參數(shù)string key,返回值為TreeNodePointer*p,返回值是指針p指向樹中關(guān)鍵字為key 的結(jié)點(diǎn),如果樹中不存在關(guān)鍵字為key的結(jié)點(diǎn),則p的值為NULL。這個結(jié)構(gòu)能判斷樹中是 否存在關(guān)鍵字為key的結(jié)點(diǎn)。因此,把某個類名作為實(shí)參傳給key,就可判斷此類是不是Qt 的控件類了,也就能判斷對象的對象是不是QT控件對象了。這里,TreeNodePointer為數(shù) 據(jù)結(jié)構(gòu)
[0074]

【權(quán)利要求】
1. 一種航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用的靜態(tài)檢查方法,其特征在于:在航管訓(xùn) 練系統(tǒng)中運(yùn)行一個QT程序內(nèi)存使用靜態(tài)的檢查程序,該程序運(yùn)行時將被檢查的代碼所在 的目錄作為運(yùn)行參數(shù),該目錄可以含有子目錄,得到檢測結(jié)果后,將監(jiān)測結(jié)果輸出到日志 文件或控制臺; 本方法專門針對Qt程序中兩種Qt專屬的兩種內(nèi)存泄露情況提供檢查能力:Qt控件對 象沒有父控件,在堆中new了這個對象;Qt控件對象有父控件; 檢測在如下5個模塊中進(jìn)行: 1)、遍歷工程目錄和子目錄下的所有后綴名為.cpp和.h文件,把文件全路徑保存為 string類型,再存放到vector類型的cpp_file中; 2)、遍歷cpp_file中的每個文件,按行讀取文件每行信息,解析new和delete語句,得 到Qt控件對象的創(chuàng)建信息和所有對象的刪除信息; 3)、解析得到的Qt對象的創(chuàng)建信息存放在newOBJMap中,所有對象的刪除信息存放在 deIeteOBJMap中; 4)、遍歷newOBJMap中的每個元素,在deleteOBJMap中查找對應(yīng)的元素,如果存在對應(yīng) 元素,則將信息合并,存放在QtObjectMap中; 5)、遍歷QtObjectMap中每個元素,得到檢測結(jié)果,輸出到日志文件或控制臺。
2. 如權(quán)利要求1所述的航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法,其特征在 于:所述在1)模塊中進(jìn)行的檢測,是通過Windows系統(tǒng)提供的_findfirst()和_findnext() 函數(shù)遍歷某個工程文件下的所有文件,并把.h和.cpp文件全路徑名存放在一個Vector類 型cpp_file中,具體步驟是: 開始,第一步,控制臺獲取工程目錄,第二步,判斷findfrist獲取當(dāng)前目錄下第一個實(shí) 例句柄,句柄值為-IL?是,結(jié)束,否,第三步,findnext根據(jù)_findfirst獲得的句柄遍歷目 錄下的所有實(shí)例,判斷返回值是否為〇 ?是,結(jié)束,否,進(jìn)入第四步,判斷此實(shí)例為子文件夾 嗎?是,當(dāng)前目錄鏈接文件夾名字得到新的目錄,返回第二步,否,進(jìn)入第五步,判斷此實(shí)例 為·cpp或·h文件嗎?是,第六步,將·cpp和·h文件的全名保存到vector類型的cpp_file 中,返回第三步。
3. 如權(quán)利要求1所述的航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法,其特征在 于: 所述在模塊2)中進(jìn)行的檢測具體步驟是: 開始,第一步,判斷文件結(jié)束?是,結(jié)束,否,第二步,讀取每行文本,保存在string類 型的line中,第三步,判斷l(xiāng)ine為注釋嗎?是,結(jié)束,否,進(jìn)入第四步,判斷是line為new 或delete語句?否,進(jìn)入第五步,判斷是new語句?是,解析line得到的刪除對象信息,文 件位置更信息,并將得到的信息保存在deleteOBJMap中,返回第一步;是new語句,進(jìn)入第 六步,解析語句獲得創(chuàng)建對象的類別,第七步,根據(jù)類別判斷為Qt空間類?不是,結(jié)束,是, 第八步,將解析得到的Qt控件,父控件,文件位置信息保存到newOBJMap中,返回第一步。
4. 如權(quán)利要求1所述的航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法,其特征在 于:所述在模塊4)中進(jìn)行的檢測具體步驟是: 開始,第一步,判斷newOBJMap結(jié)束?是,結(jié)束,否,第二步,獲取newOBJMap的下一元 素,第三步,判斷在deleteOBJMap中找到對應(yīng)元素?是,第四步,將這兩個元素合并,保存 到QtObjectMap,結(jié)束;否,把newOBJMap信息保存到QtObjectMap中,無刪除信息補(bǔ)空,回 復(fù)到第一步。
5. 如權(quán)利要求3所述的航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法,其特征 在于:所述在模塊2)進(jìn)行的檢測具體步驟中第三步,判斷l(xiāng)ine是否為注釋識別對象分為兩 種://行注釋,/**/段注釋,注釋和代碼區(qū)別對待,設(shè)置一個bool變量result區(qū)別該行代 碼是不是注釋即可,Result由解析代碼的函數(shù)返回值更新; 若為行注釋,直接跳過該行即可,并設(shè)result為commentEnd,表示注釋結(jié)束;若為段注 釋,且沒有在一行中同時出現(xiàn)/*和*/,則result值為commentBegin,表示注釋開始;若在 一行中同時出現(xiàn)/*和*/,則result值為commentEnd,表示注釋結(jié)束; 解析每行代碼時,根據(jù)result值選擇不同的解析函數(shù),parseCo_ent()為解析注釋的 函數(shù),parseCodeO為解析代碼的函數(shù); 所述在模塊2)進(jìn)行的檢測具體步驟第七步中,根據(jù)類別判斷為Qt空間類識別對象時 分為兩步: (1) 識別出程序中創(chuàng)建對象的語句; (2) 判斷識別出的對象是不是Qt對象:Qt控件所屬的類都是有繼承關(guān)系的,且最終的 父對象都為QWidget,針對這種繼承樹的關(guān)系,通過讀取InheritTree.ini配置文件建立一 個樹的結(jié)構(gòu),樹結(jié)構(gòu)提供了一個接口:findChiId,findChiId返回值為指針p指向樹中關(guān)鍵字 為key的結(jié)點(diǎn),如果樹中不存在關(guān)鍵字為key的結(jié)點(diǎn),則p的值為NULL,把某個類名作為實(shí) 參傳給key,可判斷此類是不是Qt的控件類了,即能判斷對象的對象是不是Qt控件對象。
6. 如權(quán)利要求5所述的航管訓(xùn)練系統(tǒng)開發(fā)中Qt程序內(nèi)存使用靜態(tài)檢查方法, 其特征在于:所述樹結(jié)構(gòu)提供的接口為findChild,入口參數(shù)stringkey,返回值為 TreeNodePointer*p,這里,TreeNodePointer為數(shù)據(jù)結(jié)構(gòu)
TreeNodePointer為指向一個描述樹形結(jié)構(gòu)節(jié)點(diǎn)的指針,該節(jié)點(diǎn)內(nèi)容包括:節(jié)點(diǎn)內(nèi)容key,該節(jié)點(diǎn)的子節(jié)點(diǎn)列表child_array,子節(jié)點(diǎn)個數(shù)child_num,節(jié)點(diǎn)的父節(jié)點(diǎn)parent。
【文檔編號】G06F11/36GK104461890SQ201410768041
【公開日】2015年3月25日 申請日期:2014年12月12日 優(yōu)先權(quán)日:2014年12月12日
【發(fā)明者】胡術(shù), 王煜清, 唐麒麟 申請人:四川川大智勝軟件股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1