2016-10-23 2 views
-2

Aus irgendeinem Grund erhalte ich einen Segmentierungsfehler, wenn ich versuche, Mitgliedsvariablen einem Wert zuzuordnen, der in einer Struktur in einem Vektor gespeichert ist. Wenn ich diese Zuweisung ausdekomme, verschwindet der Segmentierungsfehler.Segmentierungsfehler, wenn Elementvariable zugewiesen wird

Wo es passiert, ist unten und ist mit den Sternen markiert. Der Rest meines Codes kann auf einen Link zu meinem GitHub unten gefunden werden, wenn das hilft.

void LinkedList::findFragments(){ 
    //Initialize variables 
currentNode = head; 
prevNode = head; 
int fragListSize = 0; 
vector<fragment> tempVec; 
bool f = false; 
fragment temp; 
int arr[32]; 
//Find all the fragment groups 
//Put all the isFree flags into an array 
for(int i = 0; i < 32; i++){ 
    arr[i] = currentNode->isFree; 
    currentNode = currentNode->next; 
} 
//Find Groups of 1's which show open fragments of memory 
for (int i = 0; i < 32; i++) { 
     if (!f && arr[i] == 1) { 
       f = true; 
       temp.begin = i; 
     } 

     if (f && arr[i] == 0) { 
       f = false; 
       temp.end = i - 1; 
       temp.size = temp.end - temp.begin + 1; 
       tempVec.push_back(temp); 
     } 

     if (f && i == 31) { 
       f = false; 
       temp.end = i; 
       temp.size = temp.end - temp.begin + 1; 
       tempVec.push_back(temp); 
     } 
} 

//Make fragList equal to tempVec 
fragList = tempVec; 

//Sorting the fragments by size 
fragListSize = fragList.size(); 
for(int j = 0; j < fragListSize; j++){ 
    for(int i = 0; i < fragListSize- j - 1; i++){ 
     if(fragList[i].size < fragList[i + 1].size){ 
      iter_swap(fragList.begin() + i, fragList.begin() + i + 1); 
     } 
    } 
} 
cout << "test 3" <<endl; 
int max, min; 

//Find the min and max sizes of the fragments 
max =0; 
for(int i = 0; i < fragListSize;i++) 
{ 
    if(fragList[i].size > fragList[max].size) 
    { 
     max = i; 
    } 
} 
min =0; 
for(int i = 0; i < fragListSize;i++) 
{ 

    if(fragList[i].size < fragList[min].size) 
    { 
     min = i; 
    } 
} 

    for(int i =0; i< fragListSize; i++){ 
     cout << "Begin index: " << fragList[i].begin << " End index: " 
       << fragList[i].end<< "Frag Size"<< fragList[i].size << endl; 
    } 

//Set largest and smallest Fragment size 
//********************Segmentation Fault******************** 
largestFragment = fragList[max].size; 
smallestFragment = fragList[min].size; 
//Set the position of the smallest and largest fragments 
largestFragmentPos = max; 
smallestFragmentPos = min; 

} 

Project Code on GitHub

+2

Bitte bearbeiten Sie Ihre Frage, um eine [mcve] zur Verfügung zu stellen. –

+0

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+0

Beim Kompilieren Ihres GitHub-Codes wird die Funktion 'iter_swap()' nicht deklariert. Ist es ein nicht dokumentiertes Makro? –

Antwort

0

fand ich den Fehler. Ich habe versucht, einen Wert von einem Element aus FragList zu erhalten, bevor alles an FragList übergeben wurde. Ich habe nur eine if-Anweisung verwendet, um sicherzustellen, dass sie nicht leer ist. Tut mir leid, ich habe gerade mit dem Programmieren angefangen, aber ich schätze das Feedback und die Hilfe, die ich hier bekomme.

Verwandte Themen