繁体   English   中英

为什么此代码存在分段错误?

[英]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),因此没有地方

如果我们不知道nk的值,我们将无法正确回答您的问题。

例如,如果将值21赋予k ,则将( cin >> d[i]d写入位置20 这可能会导致分段错误。

意见建议:

1)在调试器中运行程序

2)检查nk的值

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM