PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Bei Ausführung wird Code übersprungen??


Gast
2008-09-24, 16:26:18
Hi,

ich experimentiere gerade mit einer in C geschriebenen 3rd-party .lib und hänge gerade an einer Stelle, wo mir ein Funktionsaufruf ohne erkennbaren Grund das ganze Programm zerlegt.

Glücklicherweise hab ich den Quellcode der .lib, so dass sich das ganze gut debuggen lässt. Die seltsame Beobachtung, die ich gemacht habe ist, dass bei der Ausführung der entsprechenden Funktion die ersten Zeilen gar nicht ausgeführt werden (bin beim Debuggen per EInzelschritt durch den Code gegangen), sondern direkt hineingesprungen wird.


ENetPeer * enet_host_connect (ENetHost * host, const ENetAddress * address, size_t channelCount)
{
ENetPeer * currentPeer;
ENetChannel * channel;
ENetProtocol command;

if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT)
channelCount = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT;
else
if (channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT)
channelCount = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT;

->for (currentPeer = host -> peers;
currentPeer < currentPeer + (host -> peerCount);
++ currentPeer)
{
if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED)
break;
}


Die for-Schleife ist der erste Code, den er ausführen will (siehe Pfeil) und dabei erhalte ich dann die Fehlermeldung "Unbehandelte Ausnahme bei xxxxx: Zugriffsverletzung beim Lesen an Position xxxx".

Ich habe jetzt natürlich die Theorie, dass der Fehler durch das Nichtausführen des oberen Codes verursacht wird. Aber wie kann es bitteschön sein, dass der Code nicht ausgeführt?? Einen Buffer der mir etwa den Processcounter überschreiben könnte verwende ich überhaupt nicht.


vg
Simon

Coda
2008-09-24, 16:29:33
Hast du die Lib überhaupt als Debug-Version kompiliert? Weil ansonsten ist das mit dem Stepping im Debugger nicht sehr zuverlässig.

Auch ansonsten ist es eher unwahrscheinlich, dass es was mit den Bedingungen zu tun hat. Viel wahrscheinlicher ist, dass der "host"-Pointer falsch ist, der wird da schließlich dereferenziert.

Gast
2008-09-24, 17:06:16
Die LIB hatte ich als Release Version kompiliert. Ich habs jetzt mal mit Debug gemacht und das Debugging ist jetzt tatsächlich genauer.

Dadurch hab ich auch den Fehler gefunden. Ich muss vor der Nutzung eines Host-Objekts eine bestimmte Initialisierungsfunktion aufrufen. Seitdem ich das mache funktionierts :)