【问题标题】:Attempted to read or write protected memory : C++ Modified Value of Memory [duplicate]试图读取或写入受保护的内存:C++ 修改的内存值 [重复]
【发布时间】:2015-03-21 10:24:20
【问题描述】:

我对于修剪字符串“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) = '\0';
                return end+1;
        }
    }
    return str;
}

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

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

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

请帮帮我。

【问题讨论】:

  • 我的水晶球说你用字符串文字来称呼它。你不能修改那些。一个完整的例子会有很大帮助。

标签: c++ c char-pointer


【解决方案1】:

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

不好:

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

好:

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

顺便说一句,如果字符串全是空格,您的函数不会修剪任何内容。我不确定你是否想要这样,但在这种情况下似乎应该设置*str = '\0';

【讨论】:

  • 是的,存在另一个修剪“左”到完整修剪字符串,感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2012-07-30
  • 1970-01-01
  • 2011-01-08
  • 2012-09-21
  • 2012-04-16
  • 2020-07-14
相关资源
最近更新 更多