我在为正在实现的优先级队列释放结构指针数组时遇到问题。我从客户端 C 程序创建了两个具有固定大小的动态节点指针数组。数组 heapMap 包含节点指针,这些指针映射到具有特定 ID 整数值的每个创建的节点,数组 heap 是包含节点当前值的堆数组.
一切似乎都正常,但是,我的 pq_free 函数似乎会导致错误或无法正确释放数组。任何帮助将不胜感激
结构
typedef struct node_struct{
int ID;
double val;
}NODE;
struct pq_struct {
char heapType;
int max;
int inUse;
NODE ** heap; //BOTH have a specific capacity
NODE **heapMap; //array of pointers to each
};
这是我用来为结构分配内存的函数。
PQ * pq_create(int capacity, int min_heap){
PQ * newQueue = (PQ*) malloc(sizeof(PQ)); //Allocate memory for a new heap
newQueue->max = capacity;
newQueue->inUse = 0;
int inUse = 1;//1 in use by default, the 0th point in the array is left alone intentionally
//If min_heap == 0, it it is a max heap, any other value is a min heap.
if(min_heap != 0){
newQueue->heapType = 'm';
}else{
newQueue->heapType = 'M';
}
//Allocate memory for heapMap and heap..
newQueue->heap = (NODE**) malloc(sizeof(NODE*)*capacity); //array of nodes, the heap
newQueue->heapMap = (NODE**) malloc(sizeof(NODE*) * capacity);//array of node pointers, the HEAPMAP
int i = 0;
for (i = 0; i < capacity + 1;i++) {
newQueue->heapMap[i] = NULL;
}
//return PQ pointer
return newQueue;
}
这是我的 pq_free 函数,似乎无法正常工作。感谢您提前提供帮助。
void pq_free(PQ * pq){
//free all nodes
NODE * temp;
NODE ** temp2;
int i;
for (i = 0; i < pq->inUse; i++) {
if (pq->heapMap[i] != NULL) {
temp = pq->heapMap[i];
free(temp);
}
}
//pq->heapMap = NULL;
free(pq->heap);
free(pq->heapMap);
free(pq);
}
最佳答案
由于我曾经因为这样做而在这个网站上受到指责,所以我觉得有义务对你做同样的事情。您不应该强制转换 malloc,因为它会自动强制转换为分配的数据类型,并可能导致一些糟糕的情况。
除此之外,各个节点是如何分配的?具体给出了哪些错误?我认为当您分配容量但迭代容量 + 1 个元素时,您也会离开 heapMap。
关于c - 在优先级队列的C实现中释放结构指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299115/