簡體   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