2017-08-05 13 views
2

私の大学のプロジェクトのためにプログラムを書こうとしていますが、プログラムは先に来ています。スケジューリング私はこの機能について多くのことを考えましたが、それを動作させるために、私は常にセグメンテーションフォールトを取得:11、私はまた、temp.at(J)を使用しようとしたが、それは私にセグメンテーションフォールト与えた:6を、そしてそれは次のようになりので、私はベクトルを最小化しようとしました関数外のベクトルを宣言してインバウンドすると、の代わりにtemp.size()の代わりにの値が使用されますが、それでも機能しませんでした。セグメンテーションフォールト:ベクトルを使用すると11 C++

void FCFS(Process ProcessDetails[], int Processes) 
{ 
    vector<int> temp; 
    vector<int> temp1; 
    int first = 0; //first value to compare with. 
    for(int j = 0; j < Processes; j++){ // to make sure that it passes through all elements. 
     for(int i = 0; i < Processes; i++){ // pass each PID and Burst time to vector temp and temp1. 
      if(ProcessDetails[i].ArrivalTime == first){ 
       temp.operator[](j) = ProcessDetails[i].PID; 
       temp1.operator[](j) = ProcessDetails[i].BurstTime; 
      } 
     } 
     first++;// increase first value to declare the round is finished and start a new one. 
    } 
    for(int i = 0; i < Processes; i++){ // pass the sorted vector values back to the arrays. 
     ProcessDetails[i].PID = temp.operator[](i); 
     ProcessDetails[i].BurstTime = temp1.operator[](i); 
    } 
} 

プログラムはこの機能に到達するまでうまく動作しますので、助けてください。

+1

'temp.operator [](j)'はちょうど 'temp [j]' ... – milleniumbug

+0

@milleniumbug私はちょうどそれを使用することを恐れていたことを明確にしてくれてありがとう。 –

答えて

2

にあなたのベクトルの割り当てを変更する必要があります。

デフォルトで構築されたベクトルを使用しているため、そのサイズはゼロです。したがって、アクセスする要素はありません。あなたは.at()メンバ関数を使用する場合は

、それはインデックスをチェックして、インデックスが無効である(標準ヘッダー<stdexcept>で宣言されているタイプstd::out_of_rangeの)例外をスローします。コードを適切なtry/catchブロックにラップすることで確認できます。

operator[]()を使用する前に、ベクトルのサイズを変更する必要があります(push_back()を使用して要素を追加し、resize()などを使用してサイズを変更するなど)。 operator[]()std::vectorのサイズを変更しないので、インデックスが有効であることを確認してください。

また、temp[j]temp.operator[](j)に相当します。 operator[]()関数を提供する型の場合、コンパイラはtemp[j]のような式をtemp.operator[](j)の呼び出しに処理します。

2

ベクターには要素がありません。

したがって、ベクトル演算子[]を使用すると失敗します。

要素にベクトルを追加するには、push_back、emplace、resize、またはsome other functionを使用します。

0

あなたは存在しない要素にアクセスするために使用されている場合、ベクターのoperator[]()の動作は未定義である

 if(ProcessDetails[i].ArrivalTime == first){ 
      temp.push_back(ProcessDetails[i].PID); 
      temp1.push_back(ProcessDetails[i].BurstTime); 
     } 
関連する問題