free(3)
久々にやってしまったので自戒を込めてメモ.
VS.netのVC++だと,malloc()で確保した以上の領域をいじると,free()出来ない様になる.
例えば
wchar_t* p_src = L"hoge"; size_t i_srclen = wcslen(p_src); wchar_t* p_dst = (wchar_t*)malloc(i_srclen); if (p_dst != NULL){ memset(p_dst,0,(sizeof(wchar_t) * (i_srclen)); wcscpy(p_dst,p_src); } free(p_dst);
として,_DEBUGでコンパイルすると文法エラーにはならないのだけど,実行時にfree(p_dst)出来ないよと怒られます.ところがgcc3.4.4/Cygwinでコンパイルすると問題なくfree()できてしまうので気がつかない.