C语言:分段错误

时间:2016-02-03 14:37:20

标签: c

为了测试,我编写了一个代码来计算素数<50。但我得到了分段错误。我通过gdb检查了代码,它显示“primes [index] = p;”是错的。但我真的不知道为什么以及如何解决它,请帮助我。非常感谢。

操作系统:Ubuntu 14.04

内核:3.19.0-33泛型

编译:GCC 4.84

    #include  <stdio.h>
    #include <stdbool.h>

    int main(void)
    {
     int   p, i, primes[50], index;
     bool isprime;

     primes[0] = 2;
     primes[1] = 3;
     index = 2;

     for (p = 5; p <=50; p+2)
     {
         isprime = true;
         for (i = 0; isprime && ((p/primes[i]) >= primes[i]); i=i+1)
         {
             if (p%primes[i] == 0)
                 isprime = false;
         }

         if  (isprime == true)
         {
             primes [index] = p;
             index = index +1;
         }
     }
     printf ("\n");
     for (i = 0; i <index; i=i+1)
     {
         printf("%i  ", primes[i]);
     }

     return 0;
    }

2 个答案:

答案 0 :(得分:7)

你有一个无限循环因为这个

for (p = 5 ; p <= 50 ; p + 2)
                   //    ^ has no effect
你的意思是

for (p = 5 ; p <= 50 ; p += 2)
  • 我是如何快速找到这个的?

    事实是我没有阅读代码,只是将其复制并粘贴在我最喜欢的文本编辑器中,然后用-Wall编译,然后编译器告诉我

    stack-overflow.c:129:5: warning: statement with no effect [-Wunused-value]
         for (p = 5 ; p <=50 ; p + 2)
    

答案 1 :(得分:-3)

以书面形式p <=50;,您将访问primes[50],该索引超出范围。

primes [49]是最后一个元素。

你的循环中需要p + = 2作为增量,否则永远不会终止。