+ -
当前位置:首页 → 问答吧 → 关于 C 语言中 a[10] = 5 的作用

关于 C 语言中 a[10] = 5 的作用

时间:2011-12-27

来源:互联网

int a[10];
a[10] = 5;
C编译通过,通过原因是 C语言没有地址保护机制。

问题是,a[10] = 5; 这句话的作用到底是什么?

作者: jhlxxxx   发布时间: 2011-12-27

没有意义吧

作者: defonds   发布时间: 2011-12-27

没有上下文 不好说

作者: leo_wanta   发布时间: 2011-12-27

c语言的确没有下标范围检测..

a[10]=5;的作用是为程序崩溃埋下深深的伏笔..

作者: mingliang1212   发布时间: 2011-12-27

简单的理解就是为a[0]赋值为5啊.哈哈

作者: a670910065   发布时间: 2011-12-27

埋地雷

作者: IVERS0N   发布时间: 2011-12-27

*(a + 10) = 5;

作者: sloste   发布时间: 2011-12-27

将数组中第11个数等于5

作者: wangsiyang000   发布时间: 2011-12-27

数组越界了 编译的时候不检查数组边界的

作者: pqpqr   发布时间: 2011-12-27

该回复于2011-12-27 15:01:15被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#10楼 得分:0回复于:2011-12-27 14:59:02
数组越界了。

C语言就像一把屠龙刀,很有杀伤力。
你要这把刀提供不误伤人的功能,如果有这个功能,那它还是屠龙刀吗?
那它强大的威力是不是被阉割了呢。

作者: udbwcso   发布时间: 2011-12-27

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

作者: zhujian888   发布时间: 2011-12-27

将数组之后一个int大小的内存值改变为5,由于是数组越界赋值,如果数组之后正好是其他有意义的内容(比如一个int变量,用1,2,3,4,5来区分不同的程序执行流程,即switch),就会改变了程序的执行流程,通常情况是直接导致程序崩溃。也有人利用这种情况对程序进行溢出攻击

作者: zhao4zhong1   发布时间: 2011-12-27

引用楼主 jhlxxxx 的回复:
int a[10];
a[10] = 5;
C编译通过,通过原因是 C语言没有地址保护机制。

问题是,a[10] = 5; 这句话的作用到底是什么?


c并不是没有越界检测机制,而是不要求、不强制越界检测机制的实现,如果有哪个环境实现了越界检测,那也是符合标准的行为。因为c/c++的宗旨之一,是给予程序员足够的自由度,不过多替程序员做决定,但是程序员要为自己的行为负责。

作者: wackwinds_h   发布时间: 2011-12-27

非法的操作

作者: supermegaboy   发布时间: 2011-12-27

引用 3 楼 mingliang1212 的回复:
c语言的确没有下标范围检测..

a[10]=5;的作用是为程序崩溃埋下深深的伏笔..


++

作者: dongjiawei316   发布时间: 2011-12-27

是数组第11个元素值为5,也有可能是报错。

作者: AnYidan   发布时间: 2011-12-27

使代码不可移植,并且为程序埋下一个可能难以定位的bug。

作者: wizard_tiger   发布时间: 2011-12-27