数组越界但是用scanf不报告段错误

   {        int N;
        int a[100]={1};                 //先初始赋值100年的奶牛数量为1
                                        //定义第N年
        a[0]=0;a[1]=1;a[2]=1,a[3]=1;                     //给数组前四个元素赋值即前四年的奶牛数量都为1
        int counter=4;
        for(;counter<=100;counter++)
            {

            a[counter]=a[counter-1]+a[counter-3];          //第四个元素后数组各个元素的关系
            }

        while(scanf("%d",&N))                        //循环输入第N年
        {
            printf("%d\n",a[N]);
        }
        
    }

数组a是100长度,但是序号counter<=100,明显越界。如果取消scanf就会出现段错误提示(运行时候的事情)

时间: 2024-07-28 15:21:40

数组越界但是用scanf不报告段错误的相关文章

字符串数组越界bug(2)

概述 数组下标从0开始,虽然从初学都已经知道,<陷阱与缺陷>反复强调,而在指尖运动中,就有那么几次不小心,让"精子"掉进这个"洞里"!其次,C语言字符串必须以0收尾! bug: 1-动态malloc或静态分配size大小字符串,存储size个字符,导致无0收尾,逾越警戒线,站在悬崖边了! 2-动态malloc或静态分配size大小字符串,访问或设置 [ size ] 字符 3-动态malloc或静态分配size大小字符串,没有初始化,导致无0收尾,读取整

从一道简单模拟题看数组越界以及其他

题目要求比较明确,可能做起来难度不是很大. 但我这道题用了比较久的时间. 原因是我用了一种特别容易错的方法.我在移动数组元素的时候采用不用辅助数组由前往后复制的方法(想来我也真是没事找事干),然后在这种方法下我起初交了许多遍WA,然后自己经过长时间的测试终于发现了问题所在,不止一个,各种逻辑错误. 总结主要有以下几点: 分类讨论不够明确,不够完整 没有考虑到前边操作对后边数据的影响 没有意识到数组越界的后果(a[-1],a[maxn]) 要发现和解决这些问题并不容易,需要有很高的调试技巧,通过这

一次数组越界的bug经历

数组和指针都是C里面的好东西,但是一旦使用不当,真的会让人抓狂. 下面是写程序时遇到的一次数组越界的经历,感觉对以后写程序有点启发,所以记录下来. 起因: 我想用OLED动态显示一组浮点数,而且浮点数的长度是不定的. 1.如果只是单纯的显示,没有消隐的话,上一次的长数的据残留会影响下一次短长度数据的显示. 2.如果显示一次就清空一次显示区域的话,数据会一直抖动,一开始以为是我刷新频率不够,故把刷新频率由100HZ改为1000HZ,但是效果还是和之前一样! 后来想想也是,不管我把刷新频率改为多少,

【汇编杂项】关于_高级语言中 数组越界与汇编中 栈溢出的_联系的思考

数组越界 数组越界,是刚开始学习编程时,就不断被别人提醒的一个点,“相当可怕”.获取不合理数值,造成程序异常or操作计算机重要内存,造成威胁...原因是什么呢?数组在汇编中以栈机制实现,其中内存分配的机制与数组越界的风险有很大关系.今天做个小实验,来简单探讨下这个. 代码 先展示问题代码 1 #include<stdio.h> 2 int main(){ 3 int a[3]={0,1,2}; 4 for(int i=0;i<=3;i++){ 5 a[i]=0; 6 printf(&qu

深入理解计算机系统 练习题2.25-隐式强制类型转换导致的数组越界

1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 5 float sum_elements(float a[], unsigned length) { 6 int i; 7 float result = 0; 8 cout << length << endl; 9 cout << length - 1 << endl; 10 for (i = 0;

QRCode 数组越界异常

因为需求的缘故需要解析出ios二维码的地址,把解析的地址传到按钮上 把功能写好之后用几张二维码测试没问题后提交到svn上,第二天生产环境正好发版,发现有个应用的按钮点了一直没反应,看了下控制台发现报错 居然是数组越界...纠结了好久.最后点到那个二维码看看有什么特别之处 一切尽在无言中(我擦...居然是1000多像素的二维码,你逗我呢)...

谨防数组越界!

今天第一次对数组越界问题有了深切的感受,数组越界如果在Release版本中运行也不会报错,如果是Debug版本的话,若直接通过常量数值引用数组下标会被检测到数组越界,若通过变量引用数组下标也是不会被检测到的!!! 测试下面的代码, 1 #include <stdio.h> 2 3 int main(void) 4 { 5 int arr[1][1] = {20}, brr[1] = {1}, y = 5; 6 7 //printf("%d\n", arr[5][0] ==

数组越界

1. 找出下列代码的错误 void test() { char string[10]; char *str="0123456789"; strcpy(string,str); }字符串str需要11个字节才能存放下(包括末尾的'\0'),而string只有10个字节的空间:strcpy会导致数组越界. void test() { char string[10]; char str[10]; int i; for(int i=0; i<10; i++) { str[i]='a';

Rust语言——无虚拟机、无垃圾收集器、无运行时、无空指针/野指针/内存越界/缓冲区溢出/段错误、无数据竞争

2006年,编程语言工程师Graydon Hoare利用业余时间启动了Rust语言项目.该项目充分借鉴了C/C++/Java/Python等语言的经验,试图在保持良好性能的同时,克服以往编程语言所存在的问题.其最大的特点在于保持较高的运行效率.深入的底层控制和广泛应用范围的同时,解决了传统C语言和C++语言中的内存安全问题.2009年,Mozilla接手Rust项目,创建了以Graydon为首的专业全职开发团队,并且开放了该项目的源代码.2012年1月,第一个面向公众的预览版本--v0.1 发布