这段时间把C++学完了顺带把C重学了一遍,有了汇编的基础后过去的很多疑惑都解开了,比如下面这道数组下标越界问题。

问题代码如下:

#include<stdio.h>

int  Helloworld()

{

printf("HelloWorld");

return 0;

}

void Function()

{

int  array[5]={1,2,3,4,5};

array[6]=(int)(Helloworld);

return;

}

int main()

{

Function();

return 0;

}

输出结果:

解析:按理来说数组下标越界是个非常明显的错误,但编译器不但给了通过,还把未被调用的Helloworld函数输出到了结果中,这是为什么呢?

原因是编译器将array[6]的地址翻译成EBP+4,并将Helloworld函数的地址存了进去。在Function函数调用完成堆栈平衡后取EBP+4地址到EIP从而执行了Helloworld函数。

数组下标越界解析(以C语言为例)相关推荐

  1. C语言编译器不检查数组下标越界

    这两天被人问了一个问题说假如C/C++访问下表越界的数组元素会报错么,于是充满好奇心的我动手试了一下,WTF,果然没有报错,但是会给程序带来莫名其妙的结果(比如十次的循环但是变成了死循环,但八次却可以 ...

  2. c语言编译系统是否检查越界,C语言编译器不检查数组下标越界

    这两天被人问了一个问题说假如C/C++访问下表越界的数组元素会报错么,于是充满好奇心的我动手试了一下,WTF,果然没有报错,但是会给程序带来莫名其妙的结果(比如十次的循环但是变成了死循环,但八次却可以 ...

  3. C语言 数组下标越界 - C语言零基础入门教程

    目录 一.数组下标越界简介 1.什么是数组访问越界? 2.访问越界会出现什么结果? 二.数组下标越界案例 三.防止数组下标越界方法 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习 ...

  4. 【C语言数组下标越界】数组下标越界引发的死循环

    首先来判断以下代码的执行结果 #include <stdio.h> int main() {int i = 0;int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8 ...

  5. c语言数组下标越界检查程序,数组下标越界

    已结贴√ 问题点数:20 回复次数:11 数组下标越界 题目是一个有10个元素的数组,存有10个考生的分数,写5个函数,分别计算总分,最高分,最低分,平均分,分数升序排列. 我写了5函数,问题出在最高 ...

  6. c语言中如何防止数组下标越界

    点击上方蓝字关注我,了解更多咨询 1.若数组长度和下标访问值出现错误,则会导致数组下标越界.数组下标从0开始,访问值为-1. 2.在使用循环遍历数组元素时,注意防范off-by-one的错误. 对于作 ...

  7. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

  8. Java初学最容易犯的错,数组下标越界异常怎么解决呢?

    数组下标越界是一个编程初学者最容易犯的错误. 以一个简单的一维数组为例: int a[10]:这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯 ...

  9. 关于C++中数组下标越界不报错的问题

            C++中数组下标越界程序并不报错是因为编译器不会对数组下标作越界检查造成的. C语言非常重视运行时的效率,所以没有进行数组越界检查,而C++继承了C的效率要求,自然也不做数组越界检查. ...

最新文章

  1. 深入掌握JMS(一):JMS基础
  2. python子进程修改父进程内变量_如何将父变量传递给python中的子进程?
  3. java中如何合并两个网格,Hazelcast: Java分布式内存网格框架(平台)
  4. java jsp js xml,JSP语法的xml写法
  5. jquery 随楼层滚动导航激活状态改变特效
  6. OC中给我们提供的一个技术:谓词(NSPredicate).note
  7. 多表关联的update语句
  8. 延迟加载的一些知识和误区
  9. 系统学习深度学习(十四)--权重初始化Xavier
  10. 【渝粤教育】国家开放大学2019年春季 2727税收基础 参考试题
  11. 帆软单元格以HTML显示内容(点击更改herf值和onclik值)
  12. HDU 1058 Humble Numbers(DP,数)
  13. 字符串缓冲区和字符串构造器
  14. 来料不良,只是采购一人的事吗?
  15. 【Allegro学习笔记】表面贴装封装设计过程——0603封装
  16. 服务器同时传回html和图片,【待解决】木疙瘩导出HTML代码后,部署到自己的服务器上,也按照教程解决了微信签名的问题,但是上传图片功能不能用,为何?...
  17. python灰度雷达图_python 雷达图
  18. 在计算机中NIC是什么意思?
  19. 二进制与十进制互相转换的计算方法(个人向)
  20. win10安装jdk11

热门文章

  1. MySQL 查看每个 IP 的连接数
  2. Thread的setDaemon(true)方法的作用
  3. mib browser读取飞塔mib文件的oid
  4. 堆排序Java实现以及使用场景
  5. 分治、CDQ分治小结
  6. 2C+1A(JD6621*2PCS+FP6601A)智能退功率实现方案
  7. iconv的使用方法
  8. 【opencv】Camshift目标跟踪
  9. vb.net 教程 5-9 屏幕范围内取色
  10. javascript设计模式-策略模式(Strategy)