我在spoj上的PRIME1中得到分割错误.我该如何根除它?
I am getting a segmentation error in PRIME1 on spoj. How should I eradicate it?
我对问题PRIME1的答案请告诉我我错在哪里。我收到一个分割错误。
在这里:
#include<cstdlib>
#include<iostream>
using namespace std;
int main(int argc, char** argv) {
int t=0,i=0,m=0,n=0;
cin>>t;
while(t--&&t<=10)
{
cin>>m>>n;
if(m>=1&&n-m<=100000)
{
int prime[n];
for(i=0;i<n;i++)
prime[i]=1;
for (int i=2; i*i<=n; i++)
{
if (prime[i] == true)
{
for (int j=i*2; j<=n; j += i)
prime[j] = false;
}
}
for (int k=m+1; k<n; k++)
if (prime[k])
cout <<k<<endl;
}
}
return 0;
}
for (int j=i*2; j<=n; j += i)
prime[j] = false;
这就是导致错误的原因,prime是一个大小为n的数组,意味着它的最后一个成员的索引是n-1,这个for语句试图在最后一次迭代时访问prime[n] (j<=n,意味着n仍然有效)来修复这个问题,将条件更改为:
for(int j=i*2; j<n; ++j)
编辑:可能是代码逻辑不好或者格式不好导致的分割错误,格式化后的代码编译良好,不会造成分割错误(尝试输入{1,2,3}和{10,10,10}以及更多的组合):
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int t=0,i=0,m=0,n=0;
cin>>t;
while(t--&&t<=10)
{
cin>>m;
cin>>n;
if(m>=1&&n-m<=100000)
{
int prime[n];
for(i=0;i<n;i++)
{
prime[i]=1;
}
for (int i=2; i*i<=n; i++)
{
if (prime[i] == true)
{
for (int j=i*2; j<=n; j += i)
{
cout << "poopyn";
prime[j] = false;
}
}
}
for (int k=m+1; k<n; k++)
{
if (prime[k])
{
cout <<k<<endl;
}
}
}
}
return 0;
}
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 根C++直方图中的错误
- AWS 根固定错误CURLE_SSL_PINNEDPUBKEYNOTMATCH
- 使用函数的 CERN 根 5.34 错误消息
- 分段错误 - 查找列表的根
- 使用Boost Library工具/根来编译错误
- VS2012:清单创作错误 c1010005:根元素名称应为<assembly/>
- FSEvent 无法在根上下文中创建流:错误:FSEventStreamCreate:_FSEventStreamCre
- 为什么根永远不会更改,为什么我会出现严重的访问错误
- 使用不在根项目目录上的源文件(包括在搜索路径中的文件)时发生链接错误(Visual C++)