[英]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.