2016-10-23 12 views
-2

何らかの理由で、メンバのバリアブルをベクトルの構造体に格納された値に割り当てようとすると、セグメンテーションフォルトが発生します。私がその割り当てをコメントアウトすると、セグメンテーションフォルトが消えてしまいます。メンバ変数を割り当てるときのセグメンテーションフォールト

ここで発生するのは、下にあり、アスタリスクでマークされています。私のコードの残りの部分は、もし私の助けがあれば、私のgithubへのリンクにあります。

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

あなたの質問を[編集]して[mcve]を提供してください。 –

+0

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+0

GitHubコードをコンパイルするとき、 'iter_swap()'関数は宣言されていません。それは文書化されていないマクロですか? –

答えて

0

私はバグを発見しました。私は何かがfragListにプッシュされる前に、fragListから要素の値を取得しようとしていました。 if文を使用して空でないことを確認しました。申し訳ありませんプログラミングを始めたばかりですが、フィードバックをいただきありがとうございました。

関連する問題