2016-12-13 2 views
0

リンクリストに最適なメモリ管理に問題があります。私はリンクされたリストを作成し、最初の要素を追加しますが、後に何も追加しません。基本的に私のelseステートメントは避けています。もし誰かが私にそれをする方法の概念を与えることができますか、または私が何か悪いことをしている場合、あなたが私に知らせてくれれば素晴らしいでしょう!どのようにリンクされたリストに追加して最適な管理をしたり、何かを削除することはできますか?

unsigned int MaxMem = 400000000; 
struct PCB 
{ 
    struct PCB *next; 
    struct PCB *prev; 
    int PID; 
    unsigned int PrSize; 
    int best; 
    unsigned int Begin; 
    unsigned int End; 
}*node = NULL, *first = NULL, *node1 = NULL, *node2 = NULL; 
class linked 
{ 
    public: 

     void Mem_begin(PCB a) 
     { 
      PCB *add = new PCB; 
      struct PCB *save; 
      int bestfit = -1; 
      //add->End = MaxMem; 
      add->Begin = a.PrSize; 
      add->next = NULL; 
      if((first == NULL) && (bestfit1 == -1)) 
      { 
       bestfit = a.ProcessID; 
       a.best = bestfit; 
       add->prev = NULL; 
       first = add; 
       cout << first->prev << " - " << first->Begin << " Process " << bestfit << endl; 
      } 
      else 
      { 
       save = first; 
       while(save->prev != NULL) 
       { 
        bestfit = a.PID; 
        a.best = bestfit; 
        save = save->next; 
        save->next = add; 
        add->prev = save; 
        cout << " i did it" << endl; 
       } 

      } 
     } 

     void display(PCB a) { 
      node = first; 
      while(node != NULL) 
      { 
       cout << node->prev << " - " << node->Begin << " Process " << a.best << endl; 
       node = node->next; 
      } 
     } 
}; 
int main() 
{ 
    PCB test; 
    linked try; 
    while(true) 
    { 
     cout << "What is the PID?" << endl; 
     cin >> test.PID; 
     cout << "How much memory space?" << endl; 
     cin >> test.PrSize; 
     try.Mem_begin(test); 
    } 
} 
+0

std :: listを使用してコードを記述し、テストし、動作することを確認します。次に、必要に応じて、独自のリスト実装を使用するように書き直します。私は教師や学生、専門家のように多くの人々が自分のリストクラスを書くことが良い考えだと思うのはなぜか分かりません。 –

+0

でも、メモリを最適にしようとしていますが、リストの置き換えには制限があります – darkflames363

答えて

1

示すコードがリンクされたリストの最初の要素をインストールする場合:

add->prev = NULL; 
first = add; 

最初のノードのprevポインタがNULLnextもNULLである)、そして最初の要素にfirst点です。

そして、リストが空でないとき、ロジックは以下のようなものを行く:私たちは、最初のノードの prevポインタが NULLであることを議論してきたことから、

save = first; 
while(save->prev != NULL) 

をそして、この馬は出発のフラットアウト権利を落ちますゲート。 firstprevノードは常にNULLになるため、whileループは実行されません。

あなたの全体的なロジックの意図は多少不明ですが、少なくとも「これは後に何も追加しません」という質問に答えます。

関連する問題