2016-11-04 2 views
-1

Ich bin am Ende meiner Datei die folgende Fehlermeldung erhalten:Segmentierungsfehler am Ende der Datei

Program received signal SIGSEGV, Segmentation fault. 
At X:\Sorted\Coding\C++\Weighted Grade Calculator\Source.cpp:55 

Ich verstehe nicht, warum dies geschieht, weil die Linie nur in Frage eine } enthält . Werfen Sie einen Blick:

#include<iostream> 

using namespace std; 

int main(){ 
    int numberweights; 
    int current = 1; 
    bool verbose = true; 

    float grades[] = {}, weights[] = {}; 


    cout << "How many weights are there?"; 
    cin >> numberweights; 

    /*-----------------------------------------------------*/ 

    for(int i = numberweights; i > 0; i--) { 
     cout << "What is the weight for weight #" << current << "?"; 
     cin >> weights[current - 1]; 

     current++; 

     if(verbose) { 
      cout << "\n"; 
      cout << "I:" << i << " " << "current:" << current << endl; 
     } 
    } 
    current--; 
    int rep = 0; 

    cout << weights[0]; 
    cout << weights[1]; 
    return 1; 
} 

Oft i zufällig springt zu einer Zahl von über 1 Mrd. Euro. Warum passiert dies?

+0

Wie kompilieren Sie? tritt das Problem im Debug- und Release-Modus auf oder? – lordkain

+0

Es gibt keine 55 (oder mehr) Zeilen in Ihrem geposteten Code, daher passt es offensichtlich nicht zur Fehlermeldung, die besagt, dass das Problem in Zeile 55 in der Quelldatei aufgetreten ist. Helfen Sie uns, Ihnen zu helfen, und geben Sie zumindest an, in welcher Zeile der Fehler aufgetreten ist ... Dennoch identifiziert UKMonkey mindestens eine mögliche Ursache für einen SIGSEGV (Punkt 3). Es gibt jedoch möglicherweise andere, obwohl ... – twalberg

+0

@twalberg scheint, dass Stackoverflow einige Abstände entfernt haben könnte. Wenn Sie es zurück in einen Editor kopieren, ist es Zeile 35. – Kirbykirby56

Antwort

1
  1. gute Formatierung ist dein Freund.
  2. Sie nicht öffnen/schließen Dateien, so ist Ihre Frage ein wenig irreführend.
  3. Gewichte [current - 1] ist nicht definiertes Verhalten, da die Größe des Arrays 0 ist

Ihre Arrays ändern std :: vector zu sein, und führen Sie dann eine Größe ändern, die Größe, die Sie machen wollen . Da Sie in den Speicher schreiben, der nicht in definierter Weise zugeordnet wurde, spring ich wahrscheinlich, weil Sie schreiben, wenn Sie versuchen, in Ihr Array zu schreiben. Sobald Sie in ein Array (oder Vektor) schreiben, das groß genug für den Job ist, sollte sich Ihr 'i' wie erwartet verhalten.

Willkommen bei Undefined Behavior.

+0

Nur um ein bisschen mehr hinzuzufügen - Benutzereingaben sollten nicht vertrauenswürdig sein. Sie lesen eine Ganzzahl vom Benutzer und vertrauen darauf, dass sie keine negative Zahl eingegeben hat. – UKMonkey

0

Ihr Programm ist schlecht gebildet, weil:

float grades[] = {}, weights[] = {}; 

grades und weights Null Länge Array.

g ++ meldet es als einen Fehler, warum clam, fälschlicherweise, es zu einer Warnung macht (weil sie es mit flexiblem Member-Array, einer Erweiterung von C++, aus C99 übernommen).

Verwandte Themen