memory-management - 如何解决访问冲突写入位置错误?

标签 memory-management access-violation

我有一个简单的程序,但在 *(str + start) 遇到访问冲突.为什么?我应该可以改变它。对吗?

void fn()
{
     char *str = "Hello wordl!";
     int end = strlen(str);
     int start = 0;
     end--;
     while(start < end)
     {
         *(str + start) = *(str + end);  <--- Access violation writing location *(str + Start).
         end--;
         start++;
     }
}

最佳答案

char *str = "Hello World";是一个常量字符串,不能修改。编译器可以随意将其放入不可写的位置,从而导致您看到的崩溃。

将声明替换为 char str[] = "Hello World";应该做你想做的,把字符串放入堆栈上的可修改数组中。

关于memory-management - 如何解决访问冲突写入位置错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/652153/

相关文章:

c++ - 如何使任何 C++ 库成为线程安全的?

c++-cli - AccessViolation,当从 C++/CLI 调用 C++-DLL 时

database - Zeoslib 不允许切换数据库?

java - 如何从 JVM 获取堆和 permgen 的最大大小?

c - realloc 和 memcpy 如何工作?

c - C:指向结构的指针数组的指针(分配/解除分配问题)

linux - 平面内存模型和 protected 内存模型之间的区别?

delphi - 从TStringsList读取Delphi访问冲突

opengl/glsl/sdl 代码中的 C++ 访问冲突

c++ - 写入动态二维数组时访问冲突...有时