VC++ 出现Debug Assertion Failed!

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


添加的控件



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



控件代码编辑界面


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

	protected:
		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		~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:
		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		~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;
				}
			}
		}
析构函数,有条件的去释放内存,这样就可以解决编辑时产生的这个异常。


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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cp1300

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值