2016-10-19 4 views
0

Ich finde, dass das während dem Ausführen dieses Codes heißt es: Thread1:EXC_BAD_ACCESS(code=1,address=0x7fff3010efcc)Warum hat dieser Code einen Segmentierungsfehler?

Code:

#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; 

} 
+0

Dank @sisanared –

+0

Es gibt mehrere Bugs in diesem. Jede Antwort zum Zeitpunkt des Schreibens weist auf einen Fehler hin. – Charles

Antwort

0

Wenn wir die Werte von n und k nicht wissen, können wir nicht angemessen auf Ihre Frage antworten .

von Beispiel, wenn Sie den Wert 21-k geben, schreiben Sie (cin >> d[i]) d in Position 20; Dies kann den Segmentierungsfehler verursachen. Vorschläge

:

1) führen Sie Ihr Programm in einem Debugger

2) überprüfen Sie die Werte für n und k

3) und verwenden std::vector anstelle alten C-Stil-Arrays und at() statt operator[] (durch Beispiel: cin >> d.at(i), a.at(i) = i, usw. statt cin >> d[i], a[i] = i, usw.), weil at() eine gebundene Prüfung durchführen.

+0

Der Wert von n kann alles sein zwischen1 ≤n ≤ 1000000000 und 1

+0

[http://opc.iarcs.org.in/index.php/problems/LEAFEAT] –

+0

@ Raikan10 - so brauchen Sie eine andere Null in 'a' Dimension (' 100000000' anstelle von '1000000000'); und, wie AVK (+1) zeigt, ist "a" zu groß für den Stapel; also schlage ich die Verwendung eines 'std :: vector' vor, oder eines' std :: deque' (Heap statt Stack); und besser: Vermeiden Sie die Verwendung von "a": Sie brauchen es nicht – max66

1

Der Stapel ist übergelaufen. Es gibt keinen Platz für int a[100000000], da seine Größe die Standard-Stack-Größe (1 MB unter Windows)

Verwandte Themen