Повреждение кучи при попытке освободить указатель wchar_t

Это код, который оценивает, является ли широкая строка либо 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 ГГц

-1

Решение

использование

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

в противном случае вам не хватит места для широкой строки

3

Другие решения


По вопросам рекламы [email protected]