-1

这是一个评估宽字符串是 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

4

1 回答 1

3

利用

重复 = static_cast(malloc(length * sizeof(wchar_t));

否则你没有足够的空间容纳宽字符串

于 2015-07-17T06:00:12.210 回答