Это код, который оценивает, является ли широкая строка либо L «false», либо L «true», но когда я пытаюсь ее запустить, она выдает мне эту ошибку при попытке освободить указатель на повторяющуюся строку «HEAP CORRUPTION DETECTED: after Normal блок (# 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);
Кажется, что все строковые указатели в порядке прямо перед свободным оператором. Я уверен, что совершил серьезную ошибку просто потому, что смог испортить кучу.
Компилятор: Microsoft Visual Studio 2015 RC
Процессор: Inter Core i5-3450 3,10 ГГц
использование
duplicate = static_cast (malloc (length * sizeof (wchar_t));
в противном случае вам не хватит места для широкой строки