0

プログラムの構造はそれ自体であり、C++クラスがデータメンバーとメンバー関数で定義されているヘッダーファイルmanager.hがあります。次に、manager.Cファイルにメンバー関数が実装されます。

.cファイルで3つの構造体を定義しました。

#define HTSIZE 7

struct Node
{
int value;
int page;   
struct Node *next; 
};

struct Node *hashtable[HTSIZE];


struct lruNode{
int value;
struct lruNode *next;
struct lruNode* head;
struct lruNode* tail;

};

struct lruNode* lruhashtable[HTSIZE];
struct lruNode* lruTrackHead;
struct lruNode* lruTrackTail;


struct mruNode{
int value;
struct mruNode *next;    
 };

 struct mruNode* mruTrackHead=NULL;
 struct mruNode* mruhashtable[HTSIZE];

クラスのデータメンバーは次のとおりです。クラス名:ページ

クラス名:フレーム

クラス名:マネージャー

すべての構造体はmanager.Cで宣言されています

manager.hには次のデータメンバーがあります。

Page* pagePool;
Frame* framePool;

manager.Cでは私はそれらを次のように定義しています

pagePool=new Page[n];
framePool=new Frame[n];

manager.Cのデストラクタで

私がやっている

delete[] pagePool;
delete[] framePool;
*hashtable=NULL;
*lruhashtable=NULL;
*mruhashtable=NULL;

ここでの構造体はグローバルであり、クラス自体の一部ではありません。これは私の宿題の一部です。問題は、以前のテストケース値を繰り越している私のテストケースにあります。

ポインタをそのままに設定するために編集を行いました。これで、structへのポインターのすべての配列の配列の最初の値はnullになります。

それでも、オブジェクトへのポインタの配列は解放されません。誰かがそれについてコメントできますか?

編集

ループを反復処理すると、ポインターが解放されます。

しかし、それでもオブジェクトへのポインタの配列はそうではありませんか?

4

1 に答える 1

1

あなたが電話するとき

無料(ハッシュテーブル);

の配列に割り当てられたメモリの割り当てを解除します

int value;
int page;   
struct Node *

ただし、ノードが指す構造体に割り当てられたメモリは割り当て解除されません。

主なアイデアは、「最も深い尖った」構造からトップへの割り当てを解除することです。したがって、割り当てられたのとは逆の順序で、ボトムアップの割り当て解除を試みてください。

于 2012-10-15T09:10:06.200 に答える