在调试MiniGUI应用程序时,无意中发现使用Ctrl+c 竟然产生了core文件,这明明不符合Linux信号量中默认处理方式,经过一番痛苦的定位。发现是一个无效的资源释放产生的:
情况1:
BITMAP bmWarn;
case MSG_CLOSE:
UnloadBitmap(&bmWarn);
.......
return 0;
变量bmWarn,在作用域中没有使用,而最后调用了释放。给大家提个醒,发现类似情况,请关注资源释放是否合理!!
情况2:
LOGFONT *logfontbig32 = NULL;
......
logfontbig32 = CreateLogFont("FONT_TYPE_NAME_SCALE_TTF", "arial", "ISO8859-1",
FONT_WEIGHT_SUBPIXEL, FONT_SLANT_ROMAN, FONT_FLIP_NIL,
FONT_OTHER_NIL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,
32, 0);
......
case MSG_CLOSE:
DestroyLogFont (logfontbig32);
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
......
这里释放资源条件不对,正确如下:
case MSG_DESTROY:
DestroyLogFont (logfontbig32);
return 0;
在minigui中,资源释放不正确的话非常容易产生core文件。