Структура программы такова, есть заголовочный файл manager.h, в котором класс C ++ определяется с помощью членов-данных и функций-членов. Затем в файле manager.C реализуются функции-члены.
Я определил 3 структуры в файле .c.
#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.h имеет следующие члены данных.
Page* pagePool;
Frame* framePool;
В manager.C я определяю их как
pagePool=new Page[n];
framePool=new Frame[n];
В деструкторе для менеджера. С
я делаю
delete[] pagePool;
delete[] framePool;
*hashtable=NULL;
*lruhashtable=NULL;
*mruhashtable=NULL;
Структуры здесь глобальны и не являются частью класса как такового. Это часть моей домашней работы. Проблема в моих тестовых примерах. Я продолжаю пересылать значения предыдущих тестовых случаев.
Я сделал правку, чтобы установить указатели такими, какие они есть. Теперь первое значение в массиве для всех массивов указателей на структуру равно нулю.
Тем не менее массив указателей на объекты не освобождается. Кто-то может прокомментировать это?
редактировать
При повторении цикла, указатели освобождаются.
Но все же массив указателей на объекты нет?
когда ты звонишь
бесплатно (Хеш);
Вы освобождаете память, выделенную для массива
int value;
int page;
struct Node *
но память, выделенная для структуры, которая указана Узлом, является свободной.
Основная идея состоит в том, чтобы отойти от самой глубокой заостренной структуры к вершине. Так что попробуйте сделать снизу вверх, в обратном порядке, чтобы он был выделен.
Других решений пока нет …