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; 在代码的最后(当你完成素数数组时)