求助——关于数组是什么类型类型导致的调试信息空白

逛CSDN看到这么一个问题:
c问题---关于数组溢出的思考
今天在做题时,发现定义整型数组a[10],并赋初值,然后我访问a[11],输出0,再a[11]=3后访问a[11],输出3,a的长度还是10,那么a[11]存在哪里了?
原问题见:http://ask.csdn.net/questions/234444
其实原问题下的回答已经能解决题主的问题了,只是自己也有些小思考,想着好久未写博客了,分享一点关于越界访问的经验。
首先,声明了int型数组a[10]的话,可知a指针指向RAM中一个区域,其后 10 x sizeof(int) 的区间就是数组a分配的空间。那么问题来了,如果我们访问 a + 11 x sizeof(int) 的地址(访问此地址C语言不会做越界检查),会得到什么?
以下回答基于芯片硬件设计与固件设计的经验总结,假设写访问为*a[11]
= 0xXXXX,读访问为 b
一般情况下,这个地址仍然指向RAM,只是我们不清楚这个int长度的RAM存储单元被分配做什么用途。既然是RAM,当然是可读可写的。但是假设程序已经将此RAM空间分配做变量b的存储,如果我们对此地址进行读出操作,会将变量b的数值读出;如果对此地址进行写入操作,会导致b的数值更改。题主遇到的就是这种情况。
但是这样进行越界写入,会以一种很隐蔽的方式改变变量b的值。这会给后续debug引入很大的困难。所以CODING时,一定要避免越界访问。
2. NOR FLASH等可以通过指针读出但是无法写入的区域
在嵌入式芯片(比如STM32)中,常常使用NOR FLASH存储用户程序。
当a[11]指向NOR FLASH区域时,是可以通过指针操作进行读出的。但是如果想要进行写入操作,只是通过指针操作是不可行的,这种指针简单的写操作是无法改变其中的数据的。结果就是,可以读出a[11]的数据,但是写入后发现写入失败,仍保留原数值。
说到这里多说一句,若想写入NOR FLASH,硬件上需要将待写入的数据放入到一定大小的catch中,然后启动电压泵执行擦写操作。实际嵌入式开发环境中,这种操作会被做成API直接调用。
3. 一个逻辑上存在但是物理上没有存储器的地址。
首先,指针操作访问的都是逻辑地址。实际芯片设计中,存储器的大小是固定且有效的,并不是每个逻辑地址都对应这逻辑单元。此时如果访问一个不存在的地址(无论读写),硬件上一般会触发NMI。
Maskable Interrupt的缩写,即不可屏蔽中断。虽然名字上带有“中断”二字,实际是一种错误,优先级比常见的中断不知高到哪里去了(这个吐槽好熟悉啊,长者教诲不能忘)。这个是越界访问最恐怖的归宿,因为进入NMI之后,系统会进行错误处理,而NMI常用于硬件底层错误的服务(比如RAM的校验错误、协处理器请求、IO通道检查错误),完成NMI服务后上层软件运行成什么样子,也就不得而知了。
当然,访问其他硬件上禁止访问的地址,也会有类似的结果。
所以,题主的问题与答案是:
那么a[11]存在哪里了?——在RAM中。
引申问题:
会引入错误吗?——如果地址虽然越界但仍在RAM中,不会引起大问题,最多是把你不想改写的数据改写了。
每次都会这样吗?——一般都是,但是不排除哪次访问到了不得了的地方导致严重的错误。
数组溢出问题
今天遇到个很奇葩的问题?
当自己的代码设定位数组。假设自己判断代码为空的时侯就不输出。然后溢出的地方根据版本不同,然后是0的地方不同,停止的时间不同,vs2017测试俩个电脑是多俩个,vs2012是...
数组溢出这个问题在所有的编程语言中都会遇到,那么如何解决这些问题呢?
定位问题:数组为空的情况下是不会报错的,只会在数组为空并且被调用的时候才会报错。
解决问题:一旦找到了调用空数组的地方那么问题就可...
关于C语言开大数组溢出的问题
C语言的内存分配、堆栈溢出、全局变量、局部变量、全局数组大小、局部数组大小...
68 C语言数组的静态性、越界以及溢出
C语言数组的静态性、越界以及溢出
数组溢出问题解决
报错:“0x”指令引用的“0x3dc08cc7”内存。该内存不能为read。
出错原因找到了,前面定义数组元素最多为8000,但是导入的3DS模型点的个数有10000多,所以数...
解决大数组定义时栈溢出的两种方法
1. 数据结构上:
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是1M(也...
使用char型数组过程中遇到的问题
简述最近开发中用到了char数组来接收数据 , 在使用中遇到了一些问题,这里记录一下,同时也回顾一下char数组的用法。代码之路事例一:char aa[0];首先,我们要知道,0长度的数组在ISO C...
谈谈C语言的溢出
溢出是C语言中最常见的漏洞。最常见的溢出包括数组溢出、数溢出、缓冲区溢出、指针溢出以及栈溢出,下面笔者就对这些溢出做一个总结归纳。
1 数组溢出
数组溢出是最常见的一种溢出。因为在C语言中...
C语言整型溢出会怎样
整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一...
没有更多推荐了,后使用快捷导航没有帐号?
只需一步,快速开始
查看: 89|回复: 3
新手求助一个二维数组问题
阅读权限30
签到天数:9 天结帖率: (1/2)
发表于 昨天&23:31
本帖最后由 4718303 于
23:31 编辑
&&窗口程序集名保 留&&保 留备 注窗口程序集_启动窗口&&&_按钮1_被单击&&数组文本型&5,3n整数型&&计次循环首 (5, n)数组 [n] = “123”数组 [n] [1] = 取文本左边 (数组 [n], 1)数组 [n] [2] = 取文本中间 (数组 [n], 2, 1)数组 [n] [3] = 取文本右边 (数组 [n], 1)计次循环尾 ()调试输出 (数组 [1], 数组 [1] [1], 数组 [2])spec特殊功能支持库
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
.局部变量 数组, 文本型, , &5,3&
.局部变量 n, 整数型
.计次循环首 (5, n)
& & 数组 [n] = “123”
& & 数组 [n] [1] = 取文本左边 (数组 [n], 1)
& & 数组 [n] [2] = 取文本中间 (数组 [n], 2, 1)
& & 数组 [n] [3] = 取文本右边 (数组 [n], 1)
.计次循环尾 ()
调试输出 (数组 [1], 数组 [1] [1], 数组 [2])
看图, 数组[1] 怎么会变成1位 , 我把&数组 [n] [1] = 取文本左边 (数组 [n], 1)& 这行屏蔽了就没事了,&&这就奇怪了
(214.02 KB, 下载次数: 0)
昨天&23:25 上传
数组[2]=数组[1][2]
数组[3]=数组[1][3]
补充内容 ( 23:45):
5,3 15个数组
数组[15]=数组[5][3] 原理我也不知道!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,QQ: ,邮箱:@b.qq.com
Powered by
X3.2 揭阳市揭东区精易科技有限公司
粤公网安备 25&>&关于C#索引超出了数组界限的问题??
关于C#索引超出了数组界限的问题??
上传大小:730KB
当此程序调试后点击下拉菜单选项时就会提示索引超出了数组界限,但我找了半天也没有找出错误,请高手帮忙。本人初学,望帮忙修改一下!不胜感激!
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有13条
解释的不错!
没有安装crystalReport用不了。
问题已解决谢谢
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
关于C#索引超出了数组界限的问题??
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
zhuo885566dong
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
关于C#索引超出了数组界限的问题??bool[] weekDays=new bool[5]用断点调试办法说明bool类型数组的默认初始值? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。4被浏览222分享邀请回答赞同 添加评论分享收藏感谢收起赞同 1 条评论分享收藏感谢收起写回答console.log调试object对象或数组输出时显示不全的问题
今天突然想看看自己混淆后的js用console.log输出后是什么样子,发现了一个小问题。
chrome下是这样的
Object value at left was snapshotted when logged, value below was evaluated just now.
(这左边的值是log的时候的快照,下面的值是展开的时候计算出来的)
火狐下是这样的
虽然两个浏览器都在省略输出之后使用很明确将数组地列了出来,但有时我们需要复制console.log之后的代码(比如源代码是被加密的情况下)
使用JSON.stringify将json格式的对象或数组转为字符串输出,这样就可以在console.log时显示全部内容了。
console.log(JSON.stringify(数组或对象));
对比效果如下图
这样就可以转成字符串输出完整的信息了。
版权所有 & 2018
DESIGNED BY
本站公告 当前本站主题 YUAO 即将更新至1.1.8,详情点击!建站交流群:

我要回帖

更多关于 定义一个空白数组 的文章

 

随机推荐