2017-11-15 9 views
0

実装している優先度キューの構造体ポインタの配列を解放する際に問題が発生しました。私はクライアントのCプログラムから固定サイズのノードポインタの2つの動的配列を作成します。配列heapMapには、特定のID整数値と配列で作成された各ノードにマップされるノードポインタが含まれます。ヒープは、現在の値に対してノードを含むヒープ配列です。優先順位キューの実装での構造体ポインタの配列の割り当て解除

しかし、私の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); 


} 

答えて

0

私はこれを行うためにこのサイトで一度レールされたように、私はあなたに同じことをする義務があると感じています。割り当てられたデータ型に自動的にキャストされ、いくつかの悪い状況につながる可能性があるので、mallocをキャストすべきではありません。

個々のノードはどのように割り当てられていますか?具体的にどのような誤りがありますか?私はあなたもheapから歩いていると思います。容量を割り当てながら、容量+ 1要素を繰り返します。

関連する問題