C++中的动态内存问题

Dynamic Memory issue in C++

所以我正在编写一个程序,该程序必须检查输入字符串是否为回文。它实际上正在工作,但是删除我在它的过程中创建的数组时出现了问题。

#include <iostream>

using namespace std;

bool checkPalindrome(char* text);
char* clearString(char* src);


int main() 
{
    char buffer[1000];
    cin.getline(buffer, 1000);

    cout << boolalpha << checkPalindrome(buffer) << endl;

    return 0;
}


bool checkPalindrome(char* text)
{
    char* newStr = clearString(text);
    if (!newStr)
       return false;

    int newLen = strlen(newStr);

    for (int i = 0; i < newLen / 2; i++) {
        if (newStr[i] == newStr[newLen - i - 1])
            continue;
        else
            return false;
    }

    //delete[] newStr;

    return true;
}


char* clearString(char* src)
{
    unsigned len = strlen(src);
    unsigned counter = 0;

    for (int i = 0; i < len; i++) {
        if (src[i] == ' '||src[i] == '.'||src[i] == ','||src[i] == '!')
            counter++;
    }

    unsigned newSize = len - counter + 1;
    char* dest = new(nothrow) char[newSize];

    if (!dest) {
        cout << "not enoough memory\n";
        return NULL;
    }

    int i, j;

    for(i = j = 0; j < newSize; ++i, ++j) {
        if(src[i]==' '||src[i]=='.'||src[i]==','||src[i]=='!'||src[i]=='?')
            i++;
        else
            dest[j] = src[i];
    }

    dest[j] = '[=10=]';

    return dest;
}

因此,如果执行 checkPalindrome 函数中的注释删除会导致崩溃,并且出现 "Heap corruption detected" 错误。我尝试将函数类型更改为 void 并在那里删除,但同样的事情发生了。知道是什么原因造成的吗?

您的循环复制了字符串末尾的 '[=10=]',但随后您添加了另一个 '[=10=]',使用的内存比您分配的多一个字节。