Explications des messages d'erreurs Lorsque vous soumettez une solution pour un problème, il arrive souvent que cette solution ne fonctionne pas du premier coup sur notre serveur, même si elle semblait fonctionner parfaitement chez-vous. Voici une liste des erreurs que vous pouvez rencontrer.
Si vous ne comprenez pas du tout d'où peut venir l'erreur après avoir lu cette page et appliqué les éventuels conseils, n'hésitez pas à nous contacter, nous vous aiderons à la trouver.
Ce message indique que le serveur n'a pas réussi à compiler votre programme et à générer un exécutable. Aucun point ne vous est retiré dans ce cas. Si le programme compilait chez-vous, vérifiez que vous avez sélectionné le bon langage, et que vous n'utilisez pas de bibliothèques de fonctions non standard.
| Erreur dans le résultat. Votre programme a retourné : |
Le nombre est : 50 |
| Alors que le résultat attendu était : | 50 |
Cette erreur est la plus classique : votre programme s'est déroulé sans erreur, mais le résultat fourni n'est pas le bon : il ne correspond pas à ce qui est demandé dans le sujet. Souvent, l'évaluateur affiche le résultat retourné par vorte programme, et la solution attendue.
Attention : l'évaluateur compare précisément votre solution à la solution attendue. Si vous avez ajouté du texte par rapport à ce qui est demandé, votre solution sera considérée comme fausse, même si le calcul est correct. Respectez scrupuleusement le format de sortie indiqué dans le sujet.
Si votre solution est effectivement différente de celle attendue, il s'agit d'une erreur dans votre algorithme, qui ne répond pas correctement à la question posée. Relisez-bien le sujet, et vérifiez votre algorithme sur d'autres exemples, pour essayer de trouver ce qui ne fonctionne pas.
Remarque : si votre programme a affiché beaucoup de données, pour des questions de lisibilité et de charge du serveur, celles-ci ne seront pas affichées, et un simple message Résultat trop gros pour etre affiché sera fourni. Il y a cependant une erreur dans votre programme, à vous de trouver laquelle.
Votre programme s'est terminé en indiquant qu'une erreur s'est produite. Dans les langages C++, Caml ou Java, il peut s'agir d'une exception émise par votre programme, et non interceptée.
Par exemple en Caml :
-
|
Fatal error: exception End_of_file
|
Votre programme a voulu lire des données sur l'entrée standard alors qu'il n'y avait plus rien à lire.
-
|
Fatal error: exception Failure("int_of_string")
|
Votre programme a essayé de lire un entier et n'a pas réussi, probablement parce qu'il a lu un espace à la place de l'entier. Pour corriger ce problème, ajoutez tout en haut de votre source la ligne suivante : let read_int() = Scanf.scanf " %d" (fun x -> x);; sans oublier l'espace avec le symbole %.
L'erreur peut aussi correspondre à un code de sortie différent de zéro. Par exemple, si vous avez écrit un programme C qui se termine par 'return 42', le message suivant s'affichera :
|
Votre programme a échoué à la suite d'un accès mémoire en dehors des zones réservées, ou d'un dépassement de la limite de mémoire.
|
Comme l'indique le message, deux types d'erreurs peuvent générer ce message :
- Dépassement de la limite de mémoire.
Cette erreur indique que votre programme utilise plus de mémoire que la limite indiquée dans le sujet. Vous avez peut-être créé des tableaux trop gros, alloué trop d'objets en mémoire, ou même fait trop d'appels récursifs imbriqués (dépassement de pile). Calculez la mémoire maximale utilisée par votre programme, et vérifiez si ce total dépasse la limite autorisée.
- Accès mémoire en dehors des zones réservées.
Cette erreur se produit par exemple si vous accédez en dehors des limites d'un tableau, comme l'indice -1, ou 10, d'un tableau de 10 cases. Elle se produit également si vous utilisez un pointeur et essayez de lire ou écrire à cette adresse avant de l'avoir initialisé, ou que ce pointeur correspond à une zone de mémoire non réservée.
|
Votre programme a dépassé la limite de temps
|
Votre programme ne s'est pas terminé dans la limite de temps indiquée dans le sujet. Il peut s'agir d'un bug dans votre programme qui entraîne une boucle infinie, ou tout simplement d'un algorithme qui n'est pas suffisamment efficace. Essayez d'estimer le temps que prend votre programme dans le pire cas, et comparez à la limite de temps du sujet. Si vous dépassez largement cette limite, c'est qu'il faut trouver un meilleur algorithme.
Lorsque la limite de temps est dépassée, votre programme est interrompu avant de fournir un résultat. On ne vous indique donc pas si ce résultat aurait été correct ou non.
| Sortie d'erreur de votre programme |
| RUNPROG: Program executed an unsafe function fork |
| Votre programme a appelé une fonction système non autorisée sur notre serveur. |
Votre programme a appelé une fonction que nous n'autorisons pas sur notre serveur, pour des raisons de sécurité. Il peut s'agir par exemple d'un appel à la fonction System("PAUSE"), ou une fonction de manipulation de fichiers.
|