[英]Why does this code have a segmentation fault?
我发现在运行此代码时它说Thread1:EXC_BAD_ACCESS(code=1,address=0x7fff3010efcc)
码:
#include <iostream>
using namespace std;
int main()
{
int d[20],n,k,j,i,a[100000000],count=0;
//long long int i,a[100000000];
cin>>n>>k;
for(i=0;i<k;i++)
{
cin>>d[i];
}
for(i=0;i<n;i++)
{
a[i]=i;
}
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
if(a[i]%d[j]==0)
{
a[i]=0;
}
}
}
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
count++;
}
}
cout<<count;
}
堆栈溢出。 由于int a[100000000]
的大小超过了默认的堆栈大小(在Windows上为1MB),因此没有地方
如果我们不知道n
和k
的值,我们将无法正确回答您的问题。
例如,如果将值21
赋予k
,则将( cin >> d[i]
) d
写入位置20
; 这可能会导致分段错误。
意见建议:
1)在调试器中运行程序
2)检查n
和k
的值
3)并使用std::vector
代替旧的C样式数组,并使用at()
代替operator[]
(例如: cin >> d.at(i)
, a.at(i) = i
等,以代替cin >> d[i]
, a[i] = i
等),因为at()
执行边界检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.