在冯.诺依曼结构CPU(如i386,ARM A8,A9)的保护模式或者哈佛结构(如8051, ARM M0,.. M3)的CPU下,C++编译器将放置常量的内存设置为只读模式或者放入只读内存中,如果出现往常量内存中写入数据就会产生访问冲突异常。

如果在DOS的实模式的编译器,如Turbo C/Borland C++下,可能就不会报错。

举例,反转字符串:

#include "stdio.h"
#include "string.h" //反转字符串
char* ReverseStr(char* str, int len)
{
char* header= str;
char* tail= str + len -1;
char temp;//中间变量反转字符
while(header<tail)
{
temp = *header;
*header= *tail;
*tail= temp;
++header;
--tailer;
}
return str;
} int main()
{
char* s = "abcde";
printf("反转后为:%s\n",Reverse_Str(s, strlen(s)));
getchar();
return 0;
}

上面的程序看似没有错误,

运行时

在*header=*tail; 以及 *tail=temp 行会抛出异常://xxxx.exe 中的 0xxxxxxxxx 处未处理的异常: 0xC0000005: 写入位置 0xxxxxxxx 时发生访问冲突

问题出在变量声明: char *s="abcde";

这样定义字符串变量s,s指针是保存在堆上,但字符串“abcde”是一个常量,它是保存在常量区的,被写保护了,在反转函数中,*header= *tail,是更改常量内存的值,被写保护,所以会报内存写错误

如果把"abcde"定义到栈或者全局变量就不存在此问题了。

char s[20]; 
strcpy(s, "abcde");

C++中一个0xC0000005访问冲突问题的更多相关文章

  1. 转: CreateProcessAsUser 0xC0000005访问冲突问题

    转:http://blog.csdn.net/glc22/article/details/77227367   在使用CreateProcessAsUser时出现了 0xC0000005访问冲突问题, ...

  2. Sql Server 中一个非常强大的日期格式化函数

    Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0)-- 05 16 2006 10:57AMSelect CONV ...

  3. oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏!

    oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏! ------------------------------------------------------------------ ...

  4. php中一个"异类"语法: $a && $b = $c;

    php中一个"异类"语法: $a && $b = $c;     $a = 1;$b = 2;$c = 3;$a && $b = $c;echo & ...

  5. oracle中一个字符串包含另一个字符串中的所有字符

    oracle中一个字符串包含另一个字符串中的所有字符 --解决监理报告中所勾选的标段信息,与该用户所管理的标段字符串不匹配的问题. select * from a where instr(a,b)&g ...

  6. Spark小课堂Week7 从Spark中一个例子看面向对象设计

    Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() ...

  7. Android中一个类实现的接口数不能超过七个

    近期一段时间,在开发Android应用程序的过程中,发现Android中一个类实现的接口数超过七个的时候,常常会出现超过第7个之后的接口不能正常使用.

  8. Linux中一个文件10行内容,如何输出5-8内容到屏幕

    题目是这样的,Linux中一个文件10行内容,如何输出5-8内容到屏幕首先我们模拟一下这样的环境: [root@localhost question]# pwd /root/question [roo ...

  9. [20180904]工作中一个错误.txt

    [20180904]工作中一个错误.txt --//昨天看我提交一份修改建议,发现自己写的sql语句存在错误.--//链接:http://blog.itpub.net/267265/viewspace ...

随机推荐

  1. 外贸电商的ERP有很多

    经常有人问我:市面上针对外贸电商的ERP有很多,为什么有的卖家用得风生水起,而我却觉得每款都不合适?一般我都是拒绝回答的,一是因为这种情况大多数跟ERP实施有关,很难用短短几千字就说清楚:二是因为我也 ...

  2. javascript animation lib greensock gsap介绍

    一般前台做动画有以下几种方式: 1. 简单的css transition动画; 2. css animation动画 3. javascript库动画 一般来说css html5动画只适用于简单的形变 ...

  3. Azure 经典模式中虚拟机证书指纹的生成和作用

    用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍: 证书 ...

  4. Scratch-Blockly配置过程

    原文地址:https://blog.csdn.net/litianquan/article/details/82735876 Scratch-Blockly配置过程 由于Blockly案例库开发项目需 ...

  5. layui实现checkbox的目录树tree

    layui.use([ 'tree' ], function() {$ = layui.jquery;form = layui.form;//获取节点数据getTreeData();}); funct ...

  6. Linux 系统安装[Redhat]2

    1.1. 配置网络 开机启动网卡eth0 1. 修改网络信息[root@Webserver ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVI ...

  7. MYSQL数据库、用户、表等基础构建

    MYSQL数据库.用户.表等基础构建: 1.->:创建数据库: 1.1. create schema [数据库名称] default character set utf8 collate utf ...

  8. CentOS 6 各种启动文件损坏及修复

    stage1 mbr的破坏和恢复 清空mbr 前446字节 dd if=/dev/zero of=/dev/sda bs=1 count=446 如果没有挂载启动光盘,会显示这样 如果启动前挂载了光盘 ...

  9. December 31st 2016 Week 53rd Saturday

    In every triumph, there's a lot of try. 每个胜利背后都有许多尝试. This Year is over, and let it be. It would be ...

  10. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升