これは私のコード例です:
int main()
{
const wchar_t *envpath = L"hello\\";
const wchar_t *dir = L"hello2\\";
const wchar_t *core = L"hello3";
wchar_t *corepath = new wchar_t[
wcslen(envpath) +
wcslen(dir) +
wcslen(core)
];
wcscpy_s(corepath, wcslen(corepath) + wcslen(envpath) + 1, envpath);
wcscat_s(corepath, wcslen(corepath) + wcslen(dir) + 1, dir);
wcscat_s(corepath, wcslen(corepath) + wcslen(core) + 1, core);
delete []corepath;
return 0;
}
コマンドで、delete []corepath
ブレークポイントがトリガーされます。
原因は何ですか?
また、このようにコードを書き直すと:
wcscpy_s(corepath, wcslen(envpath) + 1, envpath);
wcscat_s(corepath, wcslen(corepath) + wcslen(dir) + 1, dir);
wcscat_s(corepath, wcslen(corepath) + wcslen(core) + 1, core);
ポインタの削除時にヒープの破損が検出されました。
編集:
末尾の \0 を格納するには、コアパスも +1 で割り当てるべきだと思いますよね?