日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]最近編寫了一個升級設(shè)備的控件,可以集成到不同的配置程序中,但是每次關(guān)閉工程或者關(guān)閉編輯頁面的時候就會出現(xiàn)這個錯誤,但是編譯和運行時沒有任何問題,僅僅在關(guān)閉編輯窗體頁面的時候會出現(xiàn)。添加的控件關(guān)閉編輯就

最近編寫了一個升級設(shè)備的控件,可以集成到不同的配置程序中,但是每次關(guān)閉工程或者關(guān)閉編輯頁面的時候就會出現(xiàn)這個錯誤,但是編譯和運行時沒有任何問題,僅僅在關(guān)閉編輯窗體頁面的時候會出現(xiàn)。


添加的控件



關(guān)閉編輯就會出現(xiàn)這個錯誤



控件代碼編輯界面


通過多次的調(diào)試發(fā)現(xiàn),只要把控件代碼的析構(gòu)函數(shù)刪除掉就會解決這個問題


	protected:
		///
		///?清理所有正在使用的資源。
		///
		~SoftwareUpgradeControl()
		{
			if?(components)
			{
				delete?components;
				delete?this->pUartTxBuff;
				delete?this->pUartRxBuff;
				if?(this->pFileBuff?!=?nullptr)
				{
					delete?this->pFileBuff;
					this->pFileBuff?=?nullptr;
				}
			}
		}


通過調(diào)試發(fā)現(xiàn)問題出現(xiàn)在構(gòu)造函數(shù)中申請內(nèi)存導(dǎo)致的,如果不在構(gòu)造函數(shù)申請內(nèi)存或者釋放的時候有條件釋放,比如增加一個標(biāo)記,程序運行后才釋放,在編輯過程中編譯器也會通過構(gòu)造代碼來繪制界面,這個時候申請內(nèi)存,在關(guān)閉窗口時會釋放就會出問題,實際上知道讓程序在運行的時候釋放掉內(nèi)存,在編輯的時候不調(diào)用就可以避免這個問題。


	//必須有一個不帶參數(shù)的構(gòu)造函數(shù),否則無法再工具箱中顯示
		SoftwareUpgradeControl()
		{
			InitializeComponent();
			//
			//TODO:?在此處添加構(gòu)造函數(shù)代碼
			//
			this->isStartDownload?=?FALSE;					//沒有開始下載
			this->isGetInfo?=?FALSE;						//是否獲取過信息
			//申請內(nèi)存
			this->pUartTxBuff?=?new?BYTE[4096];
			this->pUartRxBuff?=?new?BYTE[4096];

就是這2行申請內(nèi)存導(dǎo)致的。



//必須有一個不帶參數(shù)的構(gòu)造函數(shù),否則無法再工具箱中顯示
		SoftwareUpgradeControl()
		{
			InitializeComponent();
			//
			//TODO:?在此處添加構(gòu)造函數(shù)代碼
			//
			this->isStartDownload?=?FALSE;					//沒有開始下載
			this->isGetInfo?=?FALSE;						//是否獲取過信息
			this->isRun?=?false;
			//申請內(nèi)存
			this->pUartTxBuff?=?new?BYTE[4096];
			this->pUartRxBuff?=?new?BYTE[4096];


增加一個isRun變量,在構(gòu)造函數(shù)中將其設(shè)置為無效,在非構(gòu)造函數(shù)中將其設(shè)置為有效,這樣析構(gòu)就會識別出代碼是否在運行狀態(tài)還是在預(yù)編譯狀態(tài)。


protected:
		///
		///?清理所有正在使用的資源。
		///
		~SoftwareUpgradeControl()
		{
			if?(components)
			{
				delete?components;
				if?(this->isRun?!=?false)	//必須在程序運行的某個地方將isRun=ture,這樣在此處就會釋放內(nèi)存,但是編輯的時候不會出現(xiàn)問題
				{
					delete?this->pUartTxBuff;
					delete?this->pUartRxBuff;
				}
				
				if?(this->pFileBuff?!=?nullptr)
				{
					delete?this->pFileBuff;
					this->pFileBuff?=?nullptr;
				}
			}
		}

析構(gòu)函數(shù),有條件的去釋放內(nèi)存,這樣就可以解決編輯時產(chǎn)生的這個異常。


之前也遇到過,但是不知道產(chǎn)生這個問題的原因。



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉