GDI+ new建立FontFamily指针后用delete出错的问题和解决方法

2 篇文章 0 订阅
1 篇文章 0 订阅

在使用GDI+时,我们有时用new建立某些类的指针,在用delete释放内存时会出现异常,如下面的代码:

FontFamily fontFamily(L"Arial");
	Gdiplus::Font font(&fontFamily, 8, FontStyleRegular, UnitPixel);
	RectF rectf(10.0f, 10.0f, 500.0f, 500.0f);
	SolidBrush solidbrush(Color(255, 0, 0, 0));

	INT count = 0;
	INT found = 0;
	WCHAR familyName[LF_FACESIZE];
	WCHAR* familyList = NULL;
	FontFamily* pFontFamily = NULL;

	InstalledFontCollection installedFontCollection;
	

	count = installedFontCollection.GetFamilyCount();
	pFontFamily = new FontFamily[count];
	installedFontCollection.GetFamilies(count, pFontFamily, &found);

	familyList = new WCHAR[count*(sizeof(familyName) + 3)];
	
	ZeroMemory(familyList, count*(sizeof(familyName) + 3));

	for (INT j = 0; j < count; ++j)
	{
		pFontFamily[j].GetFamilyName(familyName);
		StringCchCatW(familyList, count*(sizeof(familyName) + 3), familyName);
		StringCchCatW(familyList, count*(sizeof(familyName) + 3),L", " );
	}

	gs->DrawString(familyList, -1, &font, rectf, NULL, &solidbrush);

	delete pFontFamily;
	delete familyList;

上面代码运行,delete会出错,通过断点发现异常点如下图:


由红线可知代码异常是出现在删除一个对象(FontFamily)指针,而pFontFamily是一个FontFamily对象数组指针,

解决方法是把:

delete pFontFamily;
改成:

delete []pFontFamily;


用new建立其它类指针在delete时出错也是,要注意你是建立的对象指针(p=new FontFamily)还是对象数组指针(p=new FontFamily[count]),

对象指针用:delete p

对象数组指针用delete []p



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值