2017-11-15 1 views
0

구현중인 우선 순위 큐에 대한 구조체 포인터의 배열을 해제하는 데 문제가 있습니다. 클라이언트 C 프로그램에서 고정 크기로 노드 포인터의 두 동적 배열을 만듭니다. 배열 heapMap에는 특정 ID 정수 값 및 배열 으로 구성된 각 노드에 매핑되는 노드 포인터가 포함됩니다. 힙은 현재 값과 관련하여 노드가 포함 된 힙 배열입니다.우선 순위 큐의 구현에서 struct 포인터의 배열을 할당 해제합니다.

그러나 모든 것이 작동하는 것처럼 보일 수는 있지만 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은 할당 된 데이터 유형으로 자동 변환되므로 일부 잘못된 상황이 발생할 수 있으므로 malloc을 캐스팅하지 않아야합니다.

이외의 개별 노드는 어떻게 할당됩니까? 특별히 어떤 오류가 있습니까? 나는 당신도 당신의 힙을 걷고 있다고 생각합니다. 당신이 용량을 할당하지만 용량 + 1 요소를 반복 할 때마다보십시오.

관련 문제