您的位置:首页 > 其它

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

2017-10-21 13:32 549 查看
在使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Gdiplus