我的程序的目的是找到用户输入指示的素数。我设置了一个数组来存储找到素数的素数。当 p(被测整数)递增并且测试重新启动时,仅通过除以数组中的元素来保存处理。直到第 44030 个素数,它都运行良好。我正在使用 GCC 进行编译。为什么它给了我一个分段错误?
//Prime Finder
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i=4;
int p=7;
int j=1;
int cap;
printf("nWhich prime number would you like to see? ");
scanf("%i",&cap);
long *array=malloc(cap);
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=5;
while(i<=cap)
{
if (array[j]>=p/2) // if true then p is prime
{
j=1;
array[i]=p;
p++;
i++;
}
else if (p%array[j]==0) // if true then p is not prime
{
p++;
j=1;
}
else // in this case p is still under test
j++;
}
printf("nHere it is! %inn",array[cap]);
return 0;
}
您在malloc()
调用中分配的是cap
字节而不是cap*sizeof(long)
字节。 所以你正在覆盖内存的其他部分;具体时间取决于您向 CAP 提供的价值。