我在DEV里面运行一个很普通的程序,调用了math.h库,结果标准库出问题了,我想知道是什么回事

#include<stdio.h>
#include<math.h>
int ssb(int x,int y);
int main( )
{
int m,n;
scanf("%d %d",&m,&n);
ssb(m,n);

return 0;

}
int ssb(int x,int y)
{
int i,j;
int d=0;
int a[y-x+1];
while(d!=y)
{

    for(i=2;;i++)    
    {
        int t=sqrt(i);
        for(j=2;j<=t;j++)    
        {    
           if(i%j==0)     
           break;
        }
            if(j>t)
            {
            a[d]=i;    
            d++;                
            }
          if(d==y)
          break;  
    }        

}
int t=0;
for(i=x-1;i<y;i++)
{
t++;
if(t%10!=0)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);
}

}

img

img


你好,就是我用了你的写好的程序,还是有问题,其实我觉得腾讯可能没有问题,就是标准库有问题,他都没有运行到后面,他就调用库的时候,立马就库就报错了。

你输入的m和n是什么意思? 求从第m个开始的n个素数?
很可能是你的int a[y-x+1];这个数组不够大,改成int a[y+x+1];或者用下面的代码试试吧:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int ssb(int x,int y);
int main( )
{
    int m,n;
    scanf("%d %d",&m,&n);
    ssb(m,n);

    return 0;
}
int ssb(int x,int y)
{
    int i,j;
    int d=0;
    int* a= (int*)malloc(sizeof(int)*(y+x+1));
    
    for(i=2;;i++)
    {
        int t=sqrt((double)i);
        for(j=2;j<=t;j++)    
        {    
            if(i%j==0)     
                break;
        }
        if(j>t)
        {
            a[d]=i;    
            d++;                
        }
        if(d==y)
            break;  
    }     

    int t=0;
    for(i=x-1;i<y;i++)
    {
        t++;
        if(t%10!=0)
            printf("%d ",a[i]);
        else
            printf("%d\n",a[i]);
    }

    free(a);
    a=0;
    return 0;
}