这是一个评估宽字符串是 L"false" 还是 L"true" 的代码,但是当我尝试运行它时,它在尝试释放重复的字符串指针“HEAP CORRUPTION DETECTED: after Normal”时给了我这个错误block(#135756) at 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