久々にやってしまったので自戒を込めてメモ.

VS.netのVC++だと,malloc()で確保した以上の領域をいじると,free()出来ない様になる.

例えば

lang:c
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()できてしまうので気がつかない.