在尝试释放wchar_t指针时堆积损坏

时间:2015-07-17 05:57:05

标签: c++ heap-corruption widechar

这是一个代码,用于评估宽字符串是否为L" false"或者L" true",但是当我尝试运行它时,它在尝试释放重复的字符串指针时给出了这个错误" HEAP CORRUPTION DETECTED:在正常块(#135756)之后的0x00000000002EB3A0。 CRT检测到应用程序在堆缓冲区结束后写入内存。"。

以下是内联代码:

const wchar_t* sequence = L"false";

wchar_t* duplicate;
size_t length = wcslen(sequence) + 1;

duplicate = static_cast<wchar_t*>(malloc(length));

wcscpy_s(duplicate, length, sequence);

int boolean = -1;

if (wcscmp(duplicate, L"false") == 0) {
    boolean = 0;
}
else if (wcscmp(duplicate, L"true") == 0) {
    boolean = 1;
}

free(duplicate);

所有字符串指针在free语句之前似乎都没问题。我确信我做了一些严重的错误只是因为我能够破坏堆。

编译器:Microsoft Visual Studio 2015 RC

处理器:Inter Core i5-3450 3.10 GHz

1 个答案:

答案 0 :(得分:3)

使用

duplicate = static_cast(malloc(length * sizeof(wchar_t));

否则你没有为宽字符串留下足够的空间