这是一个代码,用于评估宽字符串是否为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
答案 0 :(得分:3)
使用
duplicate = static_cast(malloc(length * sizeof(wchar_t));
否则你没有为宽字符串留下足够的空间