试图读取或写入受保护的内存:C++修改的内存值

Attempted to read or write protected memory : C++ Modified Value of Memory

本文关键字:内存 修改 C++ 受保护 读取      更新时间:2023-10-16

I对于修剪字符串"c和c++中的char数组或char指针"使用此函数:

inline char * trimRight(char * str)
{
    char * end = str + strlen(str);
    while(str != end)
    {
        end--;
        switch(*end)
        {
            case ' ':
            case 't':
            case 'n':
            case 'v':
            case 'f':
            case 'r':
            break;
            default:
                *(end+1) = '';
                return end+1;
        }
    }
    return str;
}

但返回此错误(代码*(end+1)='\0'中的原因):

"System.AccessViolationException"类型的未处理异常发生在x.exe 中

附加信息:试图读取或写入受保护的内存。这通常表示其他内存已损坏。

请帮帮我。

毫无疑问,您试图在受写保护的字符串文本上调用此函数。确保你不使用任何字符串文字,你会没事的。

错误:

char *s = "hello   ";
trimRight(s);

好:

char s[] = "hello   ";
trimRight(s);

顺便说一句,如果字符串都是空格,那么函数不会修剪任何内容。我不确定你是否希望这样,但在这种情况下,它似乎应该设置*str = '';