VS调试数组越界问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS调试数组越界问题相关的知识,希望对你有一定的参考价值。

数组越界错误,但F5调试时崩溃点在数组越界错误语句前面两行,求原因

参考技术A 这个应该是数组越界,或者指针乱指的错误。 参考技术B 比如你定义了一个长度为5的数组int[] a = new int[5]; 那么你用a[0]到a[4]都不会越界,当你的数组下标大于5时,就会数组越界

数据越界?Open Segment?——汇编程序调试小记

汇编语言的上机课,一位同学的程序在link阶段出问题了。看提示,是这样的:

  怪事。在连接环节中,会有存取数据越界的问题。
  啥蛾子也敢出来飞。
  看学生的程序,是这样的(这不是他的原始程序,我找一段差不多样子的程序展示这个问题):

assume cs:code
code  segment
  string db 'abcdefghij'
start:
   mov ah,01 ;从键盘输入字符1~9
   int 21h
   and al,0fh
   dec al
   mov ah,0
   mov bx,offset string
   add bx,ax
   mov dl,cs:[bx]
   mov ah,02h ;显示输出
   int 21h

   mov ah,4ch
   int 21h
end start
code ends

“瞪眼法”无效。
  我发现一个细节,和他讲,有中断就要用到栈,应该明确地建一个栈段。8086汇编中,并不是用到push和pop指令时才用栈,子程序调用、中断等,都会自动用栈,要注意到这种隐含用栈的需求,指定程序的栈段和栈顶寄存器。
  但很显然,这不是发生在运行期间,还轮不上出这个问题。并且,只在模拟器里跑这个小程序,尽管用的是“野栈”,因此而挂掉的可能性几乎没有。
  注意到他一开模拟器后就连接。他说在前面编译过,我让他再编译一遍给我看。
  异常现身了!

这里提示CODE是个“Open segment”!何为Open段?开了口,没收住?
看程序中的Code段,发现最后两行是:

end start
code ends

应该改为

code ends
end start

程序到了伪指令end,就认为结束了。后面尽管有code段的ends,那也只是聋子的耳朵——摆设。所以有code段没收口,它是open的。
  再编译、连接。搞定。
  与蛾子共舞,妙哉!

以上是关于VS调试数组越界问题的主要内容,如果未能解决你的问题,请参考以下文章

android开发,数组越界,可是怎么都找不到问题,求救

Jmeter中outofmemoryError内存溢出、数组越界等问题汇总

数组越界会发生什么

Java中的数组越界问题

iOS数组越界

数组越界问题分析