這是我的示例代碼:刪除[]觸發斷點
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