gpt4 book ai didi

c++ - 内存操作错误?

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:25 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com