在VC6下调试程序,可能会遇到诸如指令引用“0xcccccccc”,该内存不能为Read的报错

究其原因,就debug版中的堆栈中的局部变量(包括指针)在明确初始化之前都用0x0cc进行初始化,因此,未初始化时 候的指针是指向地址0x0cccccccc的,而这段地址一来是处于内核地址空间,一般的应用程序是无权访问的,上面的报错就是这样产生的。因此,一旦遇 到上述报错,基本可以认定程序中出现了野指针。

另外一方面cc对应着int 3调试中断,堆栈中的存放的局部数据一般情况下是只读的,当发生意外执行堆栈里面的数据就会引发该调试中断。

可以认为0x0cc就是有特殊含义的占位符,对于指针而言,它跟NULL是一个意思,其它具有特殊意义的占位符还有:

0xcdcdcdcd - Created but not initialized

0xdddddddd - Deleted

0xfeeefeee - Freed memory set by NT's heap manager

0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ

0xabababab - Memory following a block allocated by LocalAlloc()

例如:

char   *str= "abc";
char   *str1 ;
char   *str2=strcpy(str1,str);

就会弹出0xc0000005 access violation的错误提示,因为strcpy的内部会将str拷贝到str1所在的地址空间,而未初始化的str初始化为0xcccccccc,这段地址处于内核地址空间,无权访问,因此报错

引申出来的问题:

char   *str= "abc";
char   *str1 ="sdfsd";
char   *str2=strcpy(str1,str);

也会弹出0xc0000005 access violation,这又是为什么呢

这就涉及到了常量存储区的问题

在C++ 中, 内存分成5 个区,他们分别是堆、栈、自由存储区、全局/ 静 态存储区和常量存储区。

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参 数等。

堆,就是那些由new 分配的内存块,他们的释放编译器不去 管,由我们的应用程序去控制,一般一个new 就要对应一个delete 。 如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

自由存储区,就是那些由malloc 等 分配的内存块,他和堆是十分相似的,不过它是用free 来结束自己的生命的。

全局/ 静 态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C 语言中,全局变量又分为初始化的和 未初始化的,在C++ 里面没有这个区分了,他们共同占用同一块内存区。

常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量, 不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)

正如黑线标记的说法 "sdfsd"以常量形式存于常量存储区,这一段的内存也是不可更改的,因此当然弹出错误了

0xCCCCCCCCC的内存不能访问的原因相关推荐

  1. PHP“内存位置访问无效”

    新配置的PHP环境,或者刚做过配置改动,比如新加载的DLL扩展,访问页面,可能会出现"内存位置访问无效."的错误.主要原因是DLL扩展加载失败. 我们就需要找到是哪一个DLL文件加 ...

  2. t6服务器显示内存不足,服务器内存占用高的原因

    服务器内存占用高的原因 内容精选 换一换 当您发现云服务器的运行速度变慢或云服务器突然出现网络断开现象,则可能是云服务器的带宽和CPU使用率过高导致.如果您已经通过云监控服务创建过告警任务,当CPU或 ...

  3. Java中关于内存泄漏出现的原因以及如何避免内存泄漏

    转账自:http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静 ...

  4. (转载)Java中关于内存泄漏出现的原因以及如何避免内存泄漏

    原文链接 Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实 ...

  5. 005 Linux系统内存错误产生的原因及调试方法(段错误|core dumped)

    Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转] Posted on 2008-09-05 14:52 猫头鹰 阅读(84) 评论(0)  编辑 收藏 引用 所属分类 ...

  6. SQL Server 2008备份数据库失败,拒绝访问的原因

    SQL Server 2008备份数据库失败,拒绝访问的原因 原文:SQL Server 2008备份数据库失败,拒绝访问的原因 备份数据到特定目录是出现拒绝访问,然后测试备份到C盘根目录正常. 查了 ...

  7. 内存位置访问无效 midas.dll_内存虚拟化介绍

    本文以Intel开源的ACRN项目(Homepage - Project ACRN™)介绍的内存虚拟化技术为基础,介绍一下在虚拟系统中内存管理的一些基本知识.另外不同虚拟化公司提供的技术大多基于开源项 ...

  8. 内存位置访问无效 midas.dll_java并发之内存模型

    作者:killianxu 来源:https://www.cnblogs.com/killianxu/p/11665903.html java内存模型知识导图 一 并发问题及含义 并发编程存在原子性.可 ...

  9. System.DllNotFoundException: 无法加载 DLL“GdltaxIA.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)。 WIN7系统

    System.DllNotFoundException: 无法加载 DLL"GdltaxIA.dll": 内存位置访问无效. (异常来自 HRESULT:0x800703E6). ...

最新文章

  1. Fibonacci数列的java实现
  2. 自定义PHP错误报告处理方式
  3. oracle log.xml分析,怎么在alert目录下的log.xml中关闭logminer的相关操作日志? — oracle-tech...
  4. python selenium 测试浏览器(IE,FF,Chrome)
  5. MATLAB在温室中的应用,基于MATLAB的日光温室内气温的图形显示方法与流程
  6. css 横线_CSS-画一个太极阴阳图
  7. Springboot-application.properties
  8. win10系统javac不是内部或外部命令,也不是可运行的程序 或批处理文件。
  9. js高级程序设计的笔记(一)
  10. python对比两个文件找出不同并显示_python difflib模块实现两个文件差异对比,并输出html格式。...
  11. Java变异出现错误:No enclosing instance of type XXX is accessible
  12. 关于MyEclips新导入项目报错问题,解决方法!(基础)
  13. pbdom 不能解析gbk_备受家长追捧的公立学校,摇中率不到3%,还要抢着报名?速看大摇号学校全面解析!...
  14. javajs ---- 判断字符串中是否包含子串
  15. 004 Spark中的local模式的配置以及测试
  16. 最少点字典序最短路径_LeetCode 89,因为题目晦涩而被点了1500+反对的搜索问题...
  17. 42. Understand the two meanings of typename.
  18. Search Engine -垂直搜索小汇总
  19. Atitit 信息处理设备与历史与趋势 目录 1. It设备简史与艾提拉觉得常见重要的设备 2 2. 第一部分 IT萌芽期(约公元前4000年至1945年) 2 2.1. 苏美尔人的象形文字(约公元
  20. 使用Python教你秒搭本地服务器

热门文章

  1. ifix与AB PLC contrologix 5300系列的通讯
  2. 计算机科学艺术家,计算机科学的鼻祖,编程界的上帝,视世界的码农当作艺术家...
  3. 学好C语言从关键字开始
  4. 强化学习Q-learning入门
  5. s3c6410 Booting模式
  6. 基于MVT的医学图像处理平台设计与实现
  7. CAS中的ABA问题
  8. 政务云访问服务器文件方式,政务云访问服务器文件方式
  9. 如何引流,如何维护社群?
  10. 漫步者W820NB拆解及声学性能测试