为什么这个删除[]动作错误?

时间:2016-01-19 01:39:15

标签: c++ arrays runtime-error heap delete-operator

我在使用它之后删除了一个wchar_t数组,但是失败了:

const wchar_t t1[] = L"A string";
const wchar_t* t2 = L"Other string";

wchar_t* w = new wchar_t[wcslen(t1) + wcslen(t2) + 1];

int len = swprintf_s(w, wcslen(w), L"%s%s", t1, t2);
w[len] = 0;

delete[] w;

我在delete[] w;失败,错误为write to the end of heap buffer,但我在本地检查w是否正常:

My error

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

解决了,错误是,正如@Jonathan Potter指出的那样:

  

swprintf_s(w,wcslen(w),... w最初是一个未初始化的缓冲区,所以在它上面调用wcslen是不正确的。你想将缓冲区的大小传递给swprintf_s