c++ - 内存操作错误?

标签 c++ gcc

请帮忙找出这个函数中的错误。

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 ***

请解释一下我哪里弄错了?

最佳答案

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

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

关于c++ - 内存操作错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15512955/

相关文章:

c++ - 从基于线程的流水线转移到基于任务的并行? (C++)

在创建共享对象时,不能使用针对 `__TMC_END__' 的 Haskell 堆栈静态二进制重定位 R_X86_64_32

c - 对自定义共享库的 undefined reference

c++ - 使用 SDL 和 OpenGL 编译 Makefile 错误 : missing separator,

c++ - 计算 sha256 以使用已弃用的 openssl 代码的替代方法

c++ - 在C++中,如何任意创建点位置?

c++ - GNU 调试器不显示 C++ 结构中的所有数据

c++ - VS2015拒绝未命名类型的类内初始化

mysql - gcc 在 Cygwin 上安装 Python MySQL 库失败

linux - CMake 保存剥离的调试信息