C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – c中for循环中的缓冲区数组溢出大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
什么时候程序会在缓冲区溢出的情况下崩溃
#include<stdio.h>
#include<stdlib.h>

main() {
    char buff[50];
    int i=0;
    for( i=0; i <100; i++ )
    {
        buff[i] = i;
        printf("buff[%d]=%d\n",i,buff[i]);
    }
}

分配的前50个字节会发生什么,程序什么时候会崩溃?

我在UBUNTU中看到了gcc a.out,当我99时它崩溃了

>>
buff[99]=99
*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
<<

我想知道为什么在for循环中在buff [51]上发生赋值时这不会崩溃?

解决方法

它是 undefined behavior.你永远无法预测崩溃的时间(或者根本不可能),但你不能依赖它“不崩溃”并编写应用程序代码.

推理

基本原理是c数组中没有编译或运行时’索引超出绑定检查’.这存在于STL向量或其他更高级语言的数组中.因此,每当程序访问超出分配范围的内存时,它取决于它是否只是破坏程序堆栈中的另一个字段或影响另一个程序或其他内容的内存,因此永远无法预测仅在极端情况下发生的崩溃.它只会在强制操作系统干预的状态下崩溃,或者当程序无法正常运行时崩溃.

假设你在一个函数调用中,紧接着你的数组旁边是RETURN地址,即程序用来返回它调用函数的地址.假设您已损坏,现在您的程序尝试返回损坏的值,该值不是有效地址.因此它会在这种情况下崩溃.

最糟糕的情况发生在您静修改一个字段的值时,如果没有发生崩溃,甚至没有发现错误.

大佬总结

以上是大佬教程为你收集整理的c – c中for循环中的缓冲区数组溢出全部内容,希望文章能够帮你解决c – c中for循环中的缓冲区数组溢出所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。