i tried really hard to avoid posting this question but i cant seem to spot the problem :(
so here it is..
basically i want to print the highest number of 'search_counts' from a heap.
> there is an array of struct HEAP
> there is only 1 element in HEAP , it is DATA *dataPtr , basically it points to a struct DATA (which has been allocated memory dynamically)
> i have to delete the top most item from the heap ary and print it and then reheapDown to get it back to a heap form.
problem: it prints all but the last element correctly. for the last element it prints out garbage. :(
i have been through the debugger so many times but yet it failed.
here is the code
int j is the count of how many elements were inserted into the heap ary
int whatFn is basically a checker to see that if the number of elements inserted was less than the HEAP_SIZE which is 7 then use j otherwise use HEAP_SIZE for the restrictor
void printHeap1 (HEAP *ary, int j, int whatFn)
{
int i = 0;
HEAP *pWalker, *pCur, *pLast, dataOut;
pCur = ary;
printf("--- 7 Most popular searches ---\n");
if (whatFn == NOT_EQUAL)
{
pLast = &ary[j];
j--;
for (pWalker = pCur; pWalker < pLast; pWalker++)
{
if (deleteHeap (ary, &j, &dataOut) == 1)
printToScreen (&dataOut, "heap");
else
printf("Unable to delete node\n");
}
}
else
{
pLast = &ary[HEAP_SIZE -1];
j--;
for (pWalker = pCur; pWalker < pLast; pWalker++)
{
if (deleteHeap (ary, &j, &dataOut) == 1)
printToScreen (&dataOut, "heap");
else
printf("Unable to delete node\n");
}
}
return;
}
this goes to the delete heap function that is
int deleteHeap (HEAP *heap, int *last, HEAP *dataOut)
{
// int item;
if (*last < 0)
{
return 0;
}
dataOut->dataPtr = heap[0].dataPtr;
heap [0].dataPtr = heap [*last].dataPtr;
// heap[*last].dataPtr = NULL;
(*last)--;
reheapDown (heap, 0, *last);
return 1;
}
this later goes to the reheapDown function which is
Question
mackol
i tried really hard to avoid posting this question but i cant seem to spot the problem :(
so here it is..
basically i want to print the highest number of 'search_counts' from a heap.
> there is an array of struct HEAP
> there is only 1 element in HEAP , it is DATA *dataPtr , basically it points to a struct DATA (which has been allocated memory dynamically)
> i have to delete the top most item from the heap ary and print it and then reheapDown to get it back to a heap form.
problem: it prints all but the last element correctly. for the last element it prints out garbage. :(
i have been through the debugger so many times but yet it failed.
here is the code
int j is the count of how many elements were inserted into the heap ary
int whatFn is basically a checker to see that if the number of elements inserted was less than the HEAP_SIZE which is 7 then use j otherwise use HEAP_SIZE for the restrictor
this goes to the delete heap function that is
this later goes to the reheapDown function which is
any form of help is appreciated. i just need someone to spot the error. i can fix the rest myself
thanks :)
Link to comment
Share on other sites
7 answers to this question
Recommended Posts