C++ 分段错误

C++ 分段错误,c++,c,segmentation-fault,C++,C,Segmentation Fault,我尝试了以下代码来判断prime: const int N = 200000; long prime[N] = {0}; long num_prime = 0; int is_not_prime[N]={1,1}; void Prime_sort(void) { for( long i = 2 ; i<N ; i++ ) { if( !is_not_prime[i] ) { prime[num_prime++] = i

我尝试了以下代码来判断prime:

const int N = 200000;
long prime[N] = {0};
long num_prime = 0;
int is_not_prime[N]={1,1};
void Prime_sort(void)
{
    for( long i = 2 ; i<N ; i++ )
    {
        if( !is_not_prime[i] )
        {
            prime[num_prime++] = i;
        }
        for( long j = 0; j<num_prime && i*prime[i]<N ; j++ )
        {
            is_not_prime[i*prime[j]] = 1;
        }   
    }   
}
const int N=200000;
长素数[N]={0};
long num_prime=0;
int不是素数[N]={1,1};
空素数排序(空)
{

对于(long i=2;i你的数组
不是素数
的长度为N。例如,在外部for循环的最后一圈,我将得到值
N-1
。当
i
那么大时,
不是素数[i*prime[j]
将导致你写得远远超出数组的边界


我不太确定将循环边界检查与索引进行比较是什么,它们是不同的。(我相信你的意思是编写
I*prime[j]你的程序崩溃,因为索引越界了。索引越界了,因为你的算法无效

因为如果将N设置为更小的值,它仍然会崩溃

const int N = 3;

用铅笔和纸运行程序应该不太难看出哪里出了问题…

分段错误意味着程序有一个错误,导致它在应该写入的内存之外写入。例如,数组越界错误将导致seg错误。这是C@Lundin中最常见的错误之一,但在我的代码中e会导致arry出界吗?