C++中的随机段错误

Not*_*ggs 0 c++ segmentation-fault

我是C++的新手,我不知道从哪里开始,所以我将代码上传到了pastebin,因为它有很多.

即使使用gcc的-Wall选项,此代码编译也很好,并且不会发出警告.

它应该生成所有素数,直到作为命令行参数给出的数字.

在较小的数字(例如4,000或5,000),它工作正常.在4,000,000这样的较大数字上,几乎所有时间都会出现段错误.在两者之间的数字上,无论是否运行都会受到影响.

Goz*_*Goz 10

int primes[max];

prime = primes;
while(*prime) {
    *prime = 0;
    prime++;    
}
Run Code Online (Sandbox Code Playgroud)

在前面的代码中,您可以轻松地在内存中随机运行,实际上您将通过RAM直到找到0.如果您的数组中没有0,那么它将运行到不属于该进程的内存中会发生段错误.

编辑:正如Alcon所指出的,你也在代码的其他地方这样做.

最好不要在堆栈上分配素数,因为你不太可能拥有那么多堆栈内存.

要解决此问题,请尝试使用以下代码

int primes = new int[max];

size_t count = 0;
while( count < max ) 
{
    prime[count] = 0;
    count++;    
}
Run Code Online (Sandbox Code Playgroud)

并且不要忘记调用delete [] primes; 在代码的最后(当你完成素数数组时)

  • 此时,primes的内容尚未初始化,因此(因为int是一个没有默认构造函数的主要类型,所以它是blah blah)它将是未定义的; 是否有零或有没有一点随机. (2认同)