为什么这段代码有分段错误?

时间:2016-10-19 17:18:02

标签: c++ c++11 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;

}

2 个答案:

答案 0 :(得分:1)

堆栈溢出。 int a[100000000]没有位置,因为它的大小超过了默认堆栈大小(Windows上为1MB)

答案 1 :(得分:0)

如果我们不知道nk的值,我们就无法对您的问题作出适当回应。

例如,如果您将值21提供给k,则在cin >> d[i]位置写下d20;这可能会导致分段错误。

建议:

1)在调试器中运行程序

2)检查nk

的值

3)并使用std::vector代替旧的C风格数组,使用at()代替operator[](例如:cin >> d.at(i)a.at(i) = i等代替{ {1}},cin >> d[i]等)因为a[i] = i执行绑定检查。