delete演算子がパルプンテ状態に

// VC9
#include <iostream>
#include <cstring>

#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

void foo(const WCHAR *path)
{
  WCHAR *pDir = new WCHAR[wcslen(path)];
  wcscpy(pDir, path);
  PathRemoveFileSpec(pDir);
	
  // pDir を使った処理

  delete [] pDir;  // 暴走、もしくは heap corruption detected
}

deleteで配列を開放すると奇妙なことがおこる。暴走したり、エラーメッセージが出たり。たぶんnewの時点で、'\0'の分を確保し忘れているから。いつもメモリー破壊してばかりだな自分は。ちゃんとwcscpy_s()使ったほうがいいわ。