为什么我收到了分割故障以下的C程序 [英] Why I am getting the segmentation fault in following c program

查看:134
本文介绍了为什么我收到了分割故障以下的C程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下code被编译成功,但我得到了分段故障在函数的第一行。我没有得到为什么我收到此错误。

 的#include<&stdio.h中GT;
#包括LT&;&math.h中GT;
无符号整型素= 2;无效resetprimegenerator()
{
    素= 2;
}unsigned int类型getnextprime()
{
    而(1)
    {
        如果(isprime(素数))
            返回总理;
    }}INT isprime(无符号整数N)
{
    INT I = 3,检查= 1;
    如果(N == 2)
        返回N;
    对于(i = 3; I< =开方(总理); I + = 2)
    {
        如果(素%我== 0)
        {
            检查= 0;
            打破;
        }
    }
    返回检查;
}
诠释的main()
{
    INT T,N,I = 0,J = 0;
    INT输入[500];
    unsigned int类型的答案[500] [5000]
    scanf函数(%d个,& T公司);
    的getchar();
    而(T - 大于0)
    {
        scanf函数(%d个,&安培;输入[I]);
        的getchar();
        N =输入[I]
        J = 0;
        resetprimegenerator();
        而(正 - &0)
        {
            回答[I] [J] = getnextprime();
            J ++;
        }
        我++;
    }
    对于(i = 0; I<吨;我++)
    {
        为(J = 0; J<输入[I]; J ++)
        {
            如果(J ==输入[I] -1)
                的printf(%U,回答[I] [J]);
            其他
                的printf(%U,回答[I] [J]);
        }
    }
    返回0;
}

我没有得到为什么我收到以下错误。


解决方案

  unsigned int类型的答案[500] [5000]

假设 unsigned int类型 4个字节,这个变量将占据约堆栈大小10MB。这比普通的栈的大小越大,你所拥有的是 堆栈溢出

的解决方案是使用动态分配,或使其全局/静态。根据您的需要进行选择。

The following code gets compiled successfully but I am getting the Segmentation fault in the first line of the main function. I am not getting why I am getting this error.

#include <stdio.h>
#include <math.h>
unsigned int prime=2;

void resetprimegenerator()
{
    prime=2;
}

unsigned int getnextprime()
{
    while(1)
    {
        if(isprime(prime))
            return prime;
    }

}

int isprime(unsigned int n)
{
    int i=3,check=1;
    if(n==2)
        return n;
    for(i=3;i<=sqrt(prime);i+=2)
    {
        if(prime%i==0)
        {
            check=0;
            break;
        }
    }
    return check;
}
int main()
{
    int t,n,i=0,j=0;
    int input[500];
    unsigned int answer[500][5000];
    scanf("%d",&t);
    getchar();
    while(t-->0)
    {
        scanf("%d",&input[i]);
        getchar();
        n=input[i];
        j=0;
        resetprimegenerator();
        while(n-->0)
        {
            answer[i][j]=getnextprime();
            j++;
        }
        i++;
    }
    for(i=0;i<t;i++)
    {
        for(j=0;j<input[i];j++)
        {
            if(j==input[i]-1)
                printf("%u",answer[i][j]);
            else
                printf("%u ",answer[i][j]);
        }
    }
    return 0;
}

I am not getting why I am getting the following error.

解决方案

unsigned int answer[500][5000];

Assuming unsigned int is 4 bytes, this variable will occupy about 10MB of stack size. That's bigger than the size of a normal stack, what you have is stack overflow.

The solution is to use dynamic allocation, or make it global / static. Choose according to your need.

这篇关于为什么我收到了分割故障以下的C程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆