写入位置的访问冲突
Access violation writing location?
我正试图编写一个函数来反转字符串,但在执行时遇到了这样的异常:*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字符串文字[lex.String]
¶12试图修改字符串文字的效果是未定义的。
通常,字符串文字被放在只读内存中,试图修改文字会导致"崩溃"。这无疑是对援引未定义行为的完全合理的回应。
所以你需要这样做:
char str[] = "My string to reverse!";
reverse(str);
这意味着str
被存储在可修改的存储器中。大多数现代编译器将文本字符串(即"引号内的任何内容"存储在只读内存中,因为您不打算修改原始字符串)。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 0xC0000005:读取位置0xCDCDCDC1时发生访问冲突
- 0xC0000005:读取位置0xCDCDCDCD时发生访问冲突
- 读取类的析构函数中的位置时发生访问冲突
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 创建 2D 数组0xCCCCCCCC访问冲突写入位置
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 0xC0000005:访问冲突读取位置0x0000000000000008
- 使用动态数组访问冲突写入位置
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- vc++ 访问冲突读取位置
- C++ - 智能指针 - 访问冲突读取位置0xDDDDDDDD
- C++访问冲突读取位置错误
- 调用隔离后访问冲突执行位置0x0000000000000000:New()