0

Dans le code suivant C++, il devrait être impossible pour la division entière ain par zéro à se produire:VS C++ lancer division par zéro exception après un contrôle spécifique

// gradedUnits and totalGrades are both of type int 
if (gradedUnits == 0) { 
    return 0; 
} else { 
    return totalGrades/gradedUnits; //call stack points to this line 
} 

cependant Visual Studio est popping cette erreur:

Unhandled exception at 0x001712c0 in DSA_asgn1.exe: 0xC0000094: Integer division by zero.

Et la trace de la pile pointe vers la ligne indiquée dans le code.

UPDATE: I may have just been doing something silly here. While messing around trying to get VS to pay attention to my debug breakpoints, I rebuilt the solution and the exception isn't happening any more. It seems likely to me that I was stopping in the middle of a debug session and resuming it, when I thought I was starting new sessions.

Thanks for the responses. Would it be appropriate here to delete my question since it's resolved and wasn't really what I thought it was?

Il semble que VS pourrait le faire avec n'importe quelle division entière, sans vérifier si une division par zéro est possible. Ai-je besoin d'attraper cette exception même si le code ne devrait jamais être capable de le lancer? Si oui, quelle est la meilleure façon de s'y prendre?

Ceci est pour une affectation qui spécifie VS 2005/2008 avec C++. Je préférerais ne pas rendre les choses plus compliquées que nécessaire, mais en même temps, j'aime faire les choses correctement lorsque c'est possible.

+0

Une division par zéro _looks_ impossible ici. Mais nous pourrions utiliser plus de contexte. Un autre thread pourrait-il changer gradedUnits? Souhaitez-vous publier les octets/instructions d'assemblage que le compilateur transforme en ceci? Peut-être que l'optimiseur fait quelque chose d'inattendu? –

+0

Il s'agit d'une exception d'exécution. Essayez de l'exécuter dans un débogueur et de voir les valeurs –

+0

Vous semblez être confus au sujet du fonctionnement des exceptions. Je parie que vous venez d'un arrière-plan Java? Cette exception est levée lors de l'exécution lorsque vous divisez par zéro, pas au moment de la compilation, juste pour vous informer qu'une exception possible peut se produire. Donc, alors que cette exception * ne devrait jamais se produire, elle l'est réellement, et vous devez enquêter. –

Répondre

-1

Il se trouve ce problème a été causé par le code que j'avais à l'origine, qui n'a pas eu le contrôle de division par zéro, montré ici:

return totalGrades/gradedUnits; 

Le problème est que même si je l'avais mis à jour le code, j'étais toujours dans la même session de débogage qui a jeté l'erreur d'origine, donc le programme fonctionnait encore sur l'ancien code et renvoyait l'erreur chaque fois que je le redémarrais.

Le problème a été résolu en reconstruisant la solution, ce qui a forcé une nouvelle session de débogage. Terminer simplement la session de débogage et la redémarrer avec une reconstruction l'aurait résolu aussi (je n'avais pas remarqué que j'étais encore dans la session).

0

Vous devriez essayer de passer ce code avec le débogueur VS et voir quelles sont les valeurs réelles de ces variables.

Questions connexes