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
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