为啥在内存位置写入访问冲突[重复]
Posted
技术标签:
【中文标题】为啥在内存位置写入访问冲突[重复]【英文标题】:Why Access violation writing at memory location [duplicate]为什么在内存位置写入访问冲突[重复] 【发布时间】:2017-05-11 13:46:03 【问题描述】:我有以下代码。
1 #include <stdio.h>
2 #include <string.h>
3
4 void encryptString2(char *encryptedString)
5
6
7 while (*encryptedString)
8
9 *encryptedString = *encryptedString ^ 31;
10 printf("Encrypted Character : %c\n", *encryptedString);
11 encryptedString++;
12
13
14
15 int main(int argc, char* argv[])
16
17 char *inputString = "Nahid";
18 printf("Input string : %s\n", inputString);
19 encryptString2(inputString);
20 printf("Input String : %s\n", inputString);
21
当我在 Visual Studio 中编译时,第 9 行会导致问题。它显示
Unhandled exception at 0x000B1AA4 in Page_182.exe: 0xC0000005: Access violation writing location 0x000B5C40.
谁能解释为什么会出现这个错误以及如何解决这个问题? 提前致谢。
【问题讨论】:
char inputString[] = "Nahid";
不要尝试更改字符串文字。
【参考方案1】:
字符串文字不能被修改。任何修改字符串文字的尝试都会导致未定义的行为。
来自 C 标准(6.4.5 字符串文字)
7 不确定这些数组是否不同,前提是它们的 元素具有适当的值。如果程序试图 修改这样的数组,行为未定义。
改为使用字符数组。例如
char inputString[] = "Nahid";
【讨论】:
以上是关于为啥在内存位置写入访问冲突[重复]的主要内容,如果未能解决你的问题,请参考以下文章
(ntdll.dll)处引发的异常: 0xC0000005: 写入位置 0x00007FF6010E2278 时发生访问冲突 怎么办?