当前位置:首页 > 芯闻号 > 充电吧
[导读]最近编写了一个升级设备的控件,可以集成到不同的配置程序中,但是每次关闭工程或者关闭编辑页面的时候就会出现这个错误,但是编译和运行时没有任何问题,仅仅在关闭编辑窗体页面的时候会出现。添加的控件关闭编辑就

最近编写了一个升级设备的控件,可以集成到不同的配置程序中,但是每次关闭工程或者关闭编辑页面的时候就会出现这个错误,但是编译和运行时没有任何问题,仅仅在关闭编辑窗体页面的时候会出现。


添加的控件



关闭编辑就会出现这个错误



控件代码编辑界面


通过多次的调试发现,只要把控件代码的析构函数删除掉就会解决这个问题


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


通过调试发现问题出现在构造函数中申请内存导致的,如果不在构造函数申请内存或者释放的时候有条件释放,比如增加一个标记,程序运行后才释放,在编辑过程中编译器也会通过构造代码来绘制界面,这个时候申请内存,在关闭窗口时会释放就会出问题,实际上知道让程序在运行的时候释放掉内存,在编辑的时候不调用就可以避免这个问题。


	//必须有一个不带参数的构造函数,否则无法再工具箱中显示
		SoftwareUpgradeControl()
		{
			InitializeComponent();
			//
			//TODO: 在此处添加构造函数代码
			//
			this->isStartDownload = FALSE;					//没有开始下载
			this->isGetInfo = FALSE;						//是否获取过信息
			//申请内存
			this->pUartTxBuff = new BYTE[4096];
			this->pUartRxBuff = new BYTE[4096];

就是这2行申请内存导致的。



//必须有一个不带参数的构造函数,否则无法再工具箱中显示
		SoftwareUpgradeControl()
		{
			InitializeComponent();
			//
			//TODO: 在此处添加构造函数代码
			//
			this->isStartDownload = FALSE;					//没有开始下载
			this->isGetInfo = FALSE;						//是否获取过信息
			this->isRun = false;
			//申请内存
			this->pUartTxBuff = new BYTE[4096];
			this->pUartRxBuff = new BYTE[4096];


增加一个isRun变量,在构造函数中将其设置为无效,在非构造函数中将其设置为有效,这样析构就会识别出代码是否在运行状态还是在预编译状态。


protected:
		///
		/// 清理所有正在使用的资源。
		///
		~SoftwareUpgradeControl()
		{
			if (components)
			{
				delete components;
				if (this->isRun != false)	//必须在程序运行的某个地方将isRun=ture,这样在此处就会释放内存,但是编辑的时候不会出现问题
				{
					delete this->pUartTxBuff;
					delete this->pUartRxBuff;
				}
				
				if (this->pFileBuff != nullptr)
				{
					delete this->pFileBuff;
					this->pFileBuff = nullptr;
				}
			}
		}

析构函数,有条件的去释放内存,这样就可以解决编辑时产生的这个异常。


之前也遇到过,但是不知道产生这个问题的原因。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

最近一直在研究mod音乐,很好玩,和midi差不多,mod音乐也细分为很多格式,如it,xm,mod等,如果你使用过keygen,那你一定听过那 里面的动听音乐吧~呵呵~撒卡也是因此而着迷,上高中的时

关键字: vc++ mod音乐

基类的析构函数声明为virtual,而且并不是所有的析构函数都申明为virtual————————————因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类

关键字: 析构函数

[转自]lemonClover的日记使用boost::enable_shared_from_this的注意事项2011-10-26 16:44:26 1. 如果一个类继承了boost::enable_

关键字: 构造函数 析构函数

MFC控件随着窗口大小变化VC++刚接触MFC不久,对MFC的许多函数和功能还不是很了解。所以,在仿照书本开发一个仿QQ的通讯程序的时候,就碰到了一个怎么样使控件随着窗体变化的问题。好了,废话不多说,

关键字: mfc vc++

vc++ 中开发汇编语言 汇编程序结构 一个显示字符串的汇编程序程序格式 一、模式定义二、includelib语句三、函数声明语句四、数据和代码部分Visual C/C++环境 建立工程汇编程序的调试

关键字: vc++ 汇编语言

[摘要:VC摹拟键盘输进 找了一周,终究找到摹拟键盘输进的方式了,不外话道照样要看靠谱的开源项目,才干快速找到办理题目的方式啊,空话未几道,进进主题。 摹拟键盘的方式有三种(我]           

关键字: vc++ 模拟键盘

因为我是做嵌入式开发的,每次设备程序更新后都需要修改上位机,并且多个上位机,修改起来特麻烦,又不想用C#主要是底层使用的是C语言,配置解析通信等在单片机里面写好后可以直接复制到C++中使用,比较方便,

关键字: .net vc++ 反射

__attribute__: GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function),变量属性(Variable)和类型属性(Ty

关键字: c++ 构造函数 析构函数

计算机上面使用Modbus读取传感器或相关设备还是比较常用的,之前写的Modbus-RTU协议将串口封装到了协议栈内,使用的时候遇到短板了,比如我最新需要使用TCP来读取Modbus设备,就不好用了,

关键字: vc++ 主机接口 modbus-rtu

这几天放假在家无聊编一个程序,在加载png时遇到了麻烦,后来用了两个方法解决了。一个是用GDI+,另外就是用vs.net MFC自带的CImage。先看看GDI+的方法方法1:1.GDI+画透明图层

关键字: vc++ gdi+
关闭
关闭