Hi,
ich habe noch mal ein bisschen an dem Warteschlangen-Code vom letzten Bespiel herumgespielt
und setze nun statt auf Rekursion auf Iteration.
Alles funktioniert bis auf eine Funktion "destroyQueue":
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
void destroyQueue(cw_Queue_t* pQueue){
assert(0 != pQueue);
while(NULL != pQueue->pFrontNode){
i_Node_t* pTemp = pQueue->pFrontNode->pNextNode;
free(pQueue->pFrontNode);
pQueue->pFrontNode = pTemp;
}
pQueue->pRearNode = NULL;
free(pQueue);
}
|
Dies führt bei mir zur Zeit zu einer Endlosschleife bzw. wenn ich ein 'printf' - innerhalb der Schleife - einfüge, führt mein Programm zu einer Zugriffsverletzung.
Ich habe nun innerhalb der Schleife nochmal einen Bedingung eingebaut:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
void destroyQueue(cw_Queue_t* pQueue){
assert(0 != pQueue);
while(NULL != pQueue->pFrontNode){
if(NULL != pQueue->pFrontNode){
printf("W00T. Something is NULL!\n");
break;
}
i_Node_t* pTemp = pQueue->pFrontNode->pNextNode;
free(pQueue->pFrontNode);
pQueue->pFrontNode = pTemp;
}
pQueue->pRearNode = NULL;
free(pQueue);
}
|
Tatsächlich springt das 'if'-Statement an und das Test-Program, funktioniert tadellos. Mich verwundert das, denn
ich bin eigentlich davon ausgegangen, dass die Bedingung zu Beginn geprüft wird,
so dass kein weiteres 'if'-Statement nötig wäre.
Wann wird eine Bedingung einer 'while'-Schleife nun geprüft?
LG Julien