溢出和越界的区别请问溢出和越界是什么概念,区别是什么?查了很多概念,“堆栈溢出”、数组越界等,但还不是很明
溢出和越界的区别 请问溢出和越界是什么概念,区别是什么?查了很多概念,“堆栈溢出”、数组越界等,但还不是很明白。谢谢 [解决办法] 越界就是你打水的时候拿错桶了,溢出就是你打水的时候水满出来了[解决办法] char ch = 48646373273867487; 这个就是溢出了 越界LS有例子[解决办法] 越界:一般是数组下标 int a[4]; a[10] = 1; c和c++语言中数组下标越界,编译器是不会检查出错误的,但是实际上后果可能会很严重,比如程序崩溃等。 溢出:char str[4]; gets(str); 堆栈溢出就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。[解决办法] 溢出是指数值,越界是指空间[解决办法]
int a[8]; int i = INT_MAX; a[8] = 0; /* 越界 */ i++; /* 溢出 */[解决办法] short int a;
a=32767;
a++;//溢出
char b[10];
b[10]=0;//越界
[解决办法] 溢出:
溢出是运行时的
函数是在栈区的.溢出就是超出函数默认允许开辟的内存块大小,CPU寄存器限制计算一次只能装多少个字节。你给个比它大的 ,它装不下就是溢出到隔壁的内存块了.然后把隔壁的内存块的数据填上你溢出的那几个字节值.
溢出可以用来做木马,做游戏外挂等,分析溢出后的数据,然后逆向.
越界:
越界是编译检查时的处理的,
编译时检查你的数组索引范围,当位置错了 就提示越界等warning.
[解决办法] 溢出是空间不够
越界是访问了非法的地址空间。
[解决办法] 引用: 弱弱的问一句 a++怎么溢出的?这个只是整型值的“溢出”吧。楼主问的是栈溢出吧。 把溢出和越界放一块 那就应该是 a++ 溢出
如果是堆栈溢出 那是越界行为吧
[解决办法] 关键还是看内存。
[解决办法] 引用: 越界就是你打水的时候拿错桶了,溢出就是你打水的时候水满出来了 就是这意思,你太生动了
[解决办法] 引用: 越界就是你打水的时候拿错桶了,溢出就是你打水的时候水满出来了 你适合去当老师啊,现在缺少的就是你这种老师。
[解决办法] 我知的道溢出(栈/缓冲)是指在写入数据时超过了栈或缓冲的大小(栈是向底地址溢出,缓冲区是一般是向高地址溢出)而导致其它的数据、代码的存诸空间被覆盖。
越界(数组越界)指的是你的数组本来有10个元素,你非得访问第11个这就叫越界,虽然叫法不同但对于cpu来说都是一样的,就是你访问了不访问的空间。
[解决办法] LZ误解不小哪……
“栈溢出”(也叫堆栈上溢)是由英文原文"stack overflow"直译过来的,它与我们平常单独说的溢出"overflow"不是一回事。
overflow指的是数据超过容器(变量)的容积(类型容量)而导致的截断或符号反转现象。
stack overflow的实质就是数组越界(array bounds)。但与普通的越界不同,stack这个数组是逆向增长的,对它的越界访问可能破坏更为重要的数据(例如函数的返回地址),从而造成程序的崩溃。鉴于其危害性更大,因此专门提出了stack overflow这个词来提醒程序员注意。
[解决办法] 我怎么觉得溢出是指给一个小范围的变量做运算,运算结果超出变量可表示的范围呢
------解决方案--------------------
溢出本义是算术溢出(arithmetic overflow),指算术计算结果无法在一定范围内表示,细分上溢(overflow)和下溢(underflow)。
越界即访问越界(access out of range),指对存储的访问不在预先指定的界限内。
逻辑上来说可能造成访问越界的计算结果也可以看成一种溢出,这是引申义。只不过两种情况经常一起出现,所以混用了。
栈溢出(stack overflow)是这里的一种典型情况。栈增长一端的界限一般可以直接用一个地址表示,要访问的地址超过这个阈值就是溢出,表示访问对应的存储越界。
[解决办法] 如整型32位,如果超过最大值就是溢出;越界是访问了非法的内存。
[解决办法] 中文术语很多都在滥用,最典型的就是堆和栈,有些人从来都不分的……或者一直合称堆栈……
回归英文本质,其实没那么玄乎。
1、溢出是把大的东西往小的东西里装造成的,会造成程序逻辑异常,但一般不会abort。
比如一个计时器,最大计100s的时,你让他跑了120秒,它就溢出了。
再比如一个两个char,一个200,一个也是200,相加,结果也就溢出,因为char最大就255.
2、越界是访问或者使用到不属于它的地方,会造成abort,甚至死机。
比如数组int a[3],明明只有3个元素,你用a[3],这就越界了。
比如你申请了100字节的内存,但你写的时候写到101字节去了,这也就是越界。