这是我的示例代码:删除[]触发断点
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);
堆损坏。
编辑:
我想我也应该分配corepath与+1储存结束\ 0,对不对?
“我想我也应该分配corepath与+1存储结局\ 0,对吗?“是。更好的是,使用'std :: wstring'来正确处理所有的内存分配。 –
wcslen返回字符串的长度,没有NULL终止字符,所以当你分配corepath时,你应该考虑NULL终止字符。 – TheDarkKnight