在优先队列的c实现中释放结构指针数组

deallocating array of struct pointers in c implementation of priority queue

我在为正在实施的优先级队列释放结构指针数组时遇到问题。我从客户端 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,因为它会自动转换为分配的数据类型,并可能导致一些糟糕的情况。

除此之外,各个节点是如何分配的?具体报错什么?我认为您在分配容量时也会离开 heapMap 但迭代容量 + 1 个元素。