c++ - 访问违规写入位置?

标签 c++

我正在尝试编写一个函数来反转字符串,但是当我这样做时遇到了这样的异常: *str++ = *end;谁知道原因是什么?提前致谢。

void reverse(char* str)
 {
    char *end = str;
    char temp;
    if(str)
    {
      while(*end)
       {
     end++;
       }
    end--;

    while(str<end)
    {
       temp = *str;
       *str++ = *end;
       *end--=temp;
    }
   }
 }

最佳答案

很可能,您使用字符串文字调用了该函数:

 reverse("ablewasiereisawelba");

如果不调用未定义的行为,则无法修改字符串文字,并且崩溃是对尝试修改字符串文字的有效响应。确保传递一个非常量数组:

 char palindrome[] = "ablewasiereisawelba";
 reverse(palindrome);

C++ 2011 标准 ISO/IEC 14882:2011 规定:

2.14.5 String literal [lex.string]

¶12 The effect of attempting to modify a string literal is undefined.

通常,字符串文字被放置在只读内存中,尝试修改字符串文字会导致“崩溃”。这当然是对调用未定义行为的完全合法的响应。

关于c++ - 访问违规写入位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664510/

相关文章:

c++ - 具有虚拟子方法的二维对象数组 -> "vtable referenced from"错误

c++ - 如何按取消引用的值对集合进行排序?

c++ - WASAPI GetDisplayName 返回空白

c++ - 编译几个源文件(主文件和头文件)并在 ROOT CINT 中链接它们?

c++ - 无法找到/打开输入级联

c++ - Mat 的 tcp 发送缓冲区错误

c++ - 在构造函数中初始化变量

c++ - 找不到“ui_mainwindow.h”文件

c++ - C2146 : syntax : missing ')' before identifier 's'

c++ - 将宽字符串与 ifstream::open 一起使用或将多字节字符串与 CreateProcess 一起使用