如何在C++中释放结构和对象的数组

How to free an array of structure and objects in C++?

本文关键字:对象 数组 结构 释放 C++      更新时间:2023-10-16

程序的结构是这样的,有一个头文件管理器.h,其中用数据成员和成员函数定义C++类。然后是经理。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;

在经理。C我把它们定义为

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

在管理器的析构函数中。C

我在做

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

这里的结构是全局的,而不是类本身的一部分。这是我家庭作业的一部分。问题是在我的测试用例中,我正在转发以前的测试用例值。

我做了一个编辑,把指针设置成现在的样子。现在,数组中指向struct的所有指针数组的第一个值为null。

仍然没有释放指向对象的指针数组。有人能对此发表评论吗?

编辑

在循环中迭代时,指针被释放。

但是指向对象的指针数组仍然不是?

当您调用时

free(hashtable);

您为数组释放分配的内存

int value;
int page;   
struct Node *

但是为Node所指向的结构分配的内存被注释解除分配。

其主要思想是从"最深的尖"结构到顶部进行处理。所以试着做一个自下而上的分配,按照与分配相反的顺序。