-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;
}
あなたの質問を[編集]して[mcve]を提供してください。 –
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
GitHubコードをコンパイルするとき、 'iter_swap()'関数は宣言されていません。それは文書化されていないマクロですか? –