human
Pourquoi les logiciels plantent parfois ? Pourquoi un logiciel ne fonctionne plus ? Est-ce parce qu'il essaie de diviser par zéro, par exemple ? Pourquoi les programmeurs ne testent-ils pas entièrement le logiciel avant de vous le vendre ? S'il vous plaît, expliquez-moi comme si j'avais cinq ans.
gpt
Les raisons des plantages de programmes sont vastes, en pratique il y en a plusieurs qui couvrent presque tous les cas : Mauvais pointeur : Essayer de déréférencer un morceau de mémoire qui n'a pas été alloué, ou précédemment alloué mais plus tard désalloué sans que votre programme ne le reconnaisse. Exception non gérée : votre division par zéro est un exemple d'exception dans IEEE 754 . Une exception n'est pas à proprement parler une erreur irrécupérable, mais plutôt une condition extrême qui pourrait potentiellement être raisonnablement gérée par défaut mais qu'il est souvent préférable de céder au programme. Si une telle exception est levée et que le programme n'a pas de routine de gestion pour cela, le programme s'arrête en raison de l'absence d'un chemin d'exécution déterminé. Ne répond pas : les API telles que Windows et DirectX s'attendent à ce qu'un programme les appelle régulièrement, par exemple pour récupérer de nouvelles données d'entrée. Si un programme a un long processus en cours d'exécution dans le même thread que ces contextes sont créés sans s'arrêter régulièrement pour reconnaître les API, le programme ne parviendra pas à mettre à jour les entrées, la fenêtre, etc. Le programme peut être en mesure de récupérer une fois ce long processus terminé, mais très souvent, le système d'exploitation le marque comme ne répondant pas, tout comme l'utilisateur. Ces processus continus doivent soit être fragmentés (ne pas s'exécuter pendant plus de millisecondes à la fois), soit être exécutés dans un thread séparé. Débordement de mémoire tampon : Par exemple, allouer 4 octets pour une entrée utilisateur ( nom ) [ M][A][R][K ] , demander à l'utilisateur d'entrer un nom plus long et tenter de l'écrire dans la mémoire sans vérifier la longueur [ F][R] ][A][N ] K. Ceci est lié aux mauvais pointeurs dans le sens où une tentative est faite pour lire ou écrire un morceau de mémoire que le programme n'a pas demandé au préalable. Cependant, cela ne conduit pas nécessairement à des accidents de débordement conventionnels. Si la mémoire débordée a été allouée, vous piétinerez une autre partie de vos données sans que le système d'exploitation en soit conscient. Cela pourrait entraîner toutes sortes de comportements bizarres. Débordement de pile : Lorsqu'une fonction s'exécute, elle crée un contexte local dans un morceau de mémoire préalloué. Lorsqu'une fonction en appelle une autre et que l'on en appelle une autre sans que la fonction précédente ne se termine (cela se voit souvent dans les algorithmes récursifs), si cet arbre devient suffisamment grand, il ne pourra plus tenir dans la pile. Erreur logique : Dans ce cas, le programme ne se comporte pas clairement mal en ce qui concerne le système d'exploitation ou la mémoire, mais il contient un élément logique défectueux qui conduit à des effets de type crash. Le programme peut, pour une raison ou une autre, décider que les mises à jour de la fenêtre ne sont plus nécessaires, gelant ainsi visuellement le programme.