1

请帮助查找此功能中的错误。

wchar_t* clean(wchar_t out[], const wchar_t in[])
{
    int n = wcslen(in);
    wchar_t *str = new wchar_t[n];
    wcscpy(str, in);

    out[0] = L'\0';
    wchar_t *state;

    wchar_t *word = wcstok(str, L" ", &state);

    while (NULL != word) {
        if (wcslen(word) > 1) {
            wcscat(out, word);
            wcscat(out, L" ");
        }
        word = wcstok(NULL, L" ", &state);
    }

    delete state;
    delete[] str;
    return out;
}

此函数从原始字符串中获取单词并将它们放入结果字符串中。除了函数忽略多个空格和单个字母中的单词。

不幸的是,程序落在了这个函数的最后几行,同样的错误(linux-3.7,gcc-4.7):

*** Error in `./a.out': free(): invalid next size (fast): 0x08610338 ***

请解释一下,我弄错了什么?

4

1 回答 1

8
  1. 删除delete state;. state不是指向动态内存的指针,正如您可以从没有分配给它的任何动态分配中看出的那样。它只是一个指向现有字符串中某处的指针。

  2. new wchar_t[n]用;修复缓冲区溢出 它没有用于终止 NULL 的空间。

于 2013-03-20T00:14:54.623 回答