2 baidu 33690068 baidu_33690068 于 2016.03.30 19:33 提问

段错误:您的程序发生段错误,可能是数组越界,这是怎么回事
 #include<stdio.h> 
int main(void)
{
    int N,p,i,j,index,temp; 
    int M;
    int input[10001];
    int cnt[10001];
    scanf("%d%d",&N,&p);
    for(i=0;i<N;i++)
    {
        scanf("%d",input[i]);
    }
    for(i=0;i<N;i++)
    {
        index=i;
        for(j=i+1;j<N-i;j++)
        {
            if(input[j]<input[index])
            index=j;
        }
        temp=input[i];
        input[i]=input[index];
        input[index]=temp;
    }

     for(i=0;i<N;i++)
     {
        M=p*input[i];
        for(j=i+1;j<N;j++)
        {
            if(M<=input[j])
            cnt[i]++;
         }
     }
     index=0;

     for(i=1;i<N-1;i++)
     {  
            if(cnt[i]>cnt[index])
            index=i;

     }
     printf("%d\n",cnt[index]);
     return 0;
}

3个回答

lx624909677
lx624909677   Ds   Rxr 2016.03.30 19:50

提示不写的很清楚了么,你的程序数组越界了,debug模式,按F5运行,看看具体蹦哪儿了应该是index值大于数组最大下标了

bealing
bealing   Rxr 2016.03.30 20:23

scanf("%d",input[i]);
应该是scanf("%d",&input[i]);
少了个&

bealing
bealing 。。。。我只能建议你多研究研究scanf函数的本质
2 年多之前 回复
baidu_33690068
baidu_33690068 为什么呢,数组不是不用加&吗
2 年多之前 回复
bai596140538
bai596140538   2016.03.30 23:07

段错误不等于越界,这个要搞清楚什么是段错误

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
牛客网“程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)”错误的可能原因
牛客网编程提示“程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)“的可能原因
pat1008段错误
段错误 您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起  存在段错误代码: #include #define SIZE 110 void reverse(int ary[], int from, int to){ int t; while(from < to){ t = ary[from]; ary[from] = ary
华为上机笔试 2016-9-4
-
堆栈溢出的常见情况
一、局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。 例如:
段错误的第三种情况
<br />如果PPE生命了几个SPE,但是这几个SPU并没有全用,就会出现段错误。
PAT段错误问题
#include &amp;lt;iostream&amp;gt;#include &amp;lt;algorithm&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;using namespace std;typedef struct {    int x;    int y;    int num;}PeaNut;bool DWGreater(const Pea...
C/C++段错误问题排查和解决方法
 Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。   来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment   背景     最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛
PAT段错误记录
刚开始用C++写算法,刷PAT 甲组的题,就被段错误泼了一大盆冷水。。。心中一万匹某马类动物飘过改了n遍代码,终于找到了错误的出处,暂且记录下来,只知道段错误是访问了不能访问的内存,但是不知道为什么改成这样就可以了:输入数据的时候,用scanf(),不要用cin,就没有这样的问题了,至少现在遇到的是这样,以后还有再说。。scanf(&quot;%d %d %d %d&quot;,&amp;amp;bmax,&amp;amp;snum...
运行时出现段错误
编译通过,运行时出现段错误 产生段错误是因为访问了错误的内存段,一般是你没有权限(这句话很重要),或者根本就不存在对应的物理内存,尤其常见的是访问0地址.    通常,段错误就发生在访问的内存超出了系统所给程序的内存空间,这个值是由gdtr来保存的,它是一个48位的寄存器,其中的32位保存由它指向的gdt表,后 13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行
c++中的段错误(segment fault)
段错误一般发生在递归导致的栈溢出或这数组溢出,还有就是if语句中可能出错,比如一个链表结构: struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };在链表指针指向为空的时候,它就不可能存在val值,这时候,如果你的if