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

标签 c arrays pointers heap free

我在为正在实现的优先级队列释放结构指针数组时遇到问题。我从客户端 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/

相关文章:

c - 用于生成 AWK 扫描器的 FLEX - 识别变量

javascript - 如何获取 JSON 数组中的元素数量?

c - (新手) strstr() 返回带有无符号参数的 null

c - 函数返回的动态数组的长度

c - 将结构传递给 C 中的函数

c - 乌类图 : Permissions for C program built in Eclispse

c - 这个 C for 循环如何打印文本艺术金字塔?

java - 无法打印从txt文件读取的数组

python - numpy 如何排序数组切片索引?

c++ - 为什么 std::adressof() 在无效输入时表现如此?