Pour C/C++, j'ai une bonne image des cas d'utilisation qui peuvent provoquer une fuite de mémoire, une corruption de mémoire etc ... Mais qu'en est-il de Fortran?Quelles sont toutes les erreurs de mémoire possibles qu'un développeur Fortran peut faire?
Répondre
Je dirais que, l'allocation de pointeur est certainement un moyen (et probablement le seul évident) pour créer des fuites de mémoire dans Fortran:
program test
implicit none
integer :: ii
integer, pointer :: leak(:)
do ii = 1, 10000000
allocate(leak(1000))
leak(:) = 0
end do
end program test
Comme les autres états de réponse, vous pouvez provoquer une fuite de mémoire avec un pointeur.
Il existe deux manières évidentes de provoquer une corruption de la mémoire. Vous pouvez écrire à un élément d'un tableau qui n'existe pas:
real :: a (100)
a (101) = 3.0
Vous pouvez également appeler un sous-programme avec un décalage entre les arguments de l'appel et dans le sous-programme réel. Il existe de nombreuses façons de le faire.
La corruption de la mémoire peut être désagréable car le symptôme peut devenir visible longtemps après l'erreur ou parce qu'il provoque une erreur non informative (par exemple, "erreur de segmentation"). Avec le Fortran moderne, le codage approprié et l'utilisation des options de vérification d'erreurs complètes fournies par les compilateurs, les deux méthodes que j'ai mentionnées seront détectées par les compilateurs Fortran, avec des messages informatifs fournis. La vérification de l'indice d'exécution détecte l'écriture dans un élément inexistant d'un tableau. Si vous créez les interfaces, vos sous-routines expliquent que le compilateur, au moment de la compilation, détectera les discordances entre les arguments de l'appel et de la procédure. La façon la plus simple de le faire est de placer les procédures (sous-routines et fonctions) dans le (s) module (s) et d'utiliser ces modules.
- 1. Quelles sont toutes les options possibles de déploiement de rapports?
- 2. Quelles sont toutes les valeurs possibles pour SQLException.getSQLState?
- 3. Liste de toutes les erreurs PHP possibles
- 4. Quelles sont les causes possibles de JasperException
- 5. java JIT - quelles optimisations sont possibles?
- 6. Quelles sont les raisons possibles de "Potentiellement dangereux Request.RawUrl"?
- 7. Toutes les erreurs de validation de modèle possibles
- 8. Quelles sont les erreurs dans ce code?
- 9. Quelles sont les causes possibles d'un dépassement de pile?
- 10. Quelles sont les causes possibles de "BUG: scheduling while atomic?"
- 11. Quelles sont les causes possibles de File.getAbsolutePath() retournant null?
- 12. Liste de toutes les erreurs Uncaught possibles: Exceptions DOM?
- 13. Quelles sont les erreurs avec cette requête?
- 14. Quelles sont les erreurs dans ce code?
- 15. Toutes les combinaisons possibles
- 16. Quelles sont les meilleures pratiques pour gérer les erreurs de mémoire insuffisante?
- 17. Quelles sont ces erreurs? (avro)
- 18. Comment intercepter toutes les erreurs possibles avec url fetch (python)?
- 19. Quelles sont toutes les valeurs possibles pour l'en-tête HTTP "Content-Type"?
- 20. Quelles sont les causes possibles d'un élément HTML à masquer?
- 21. Keyboard.FocusedElement est nul, quelles sont les causes possibles?
- 22. sp_depends dans SQL Server, quelles sont les dépendances possibles?
- 23. toutes les combinaisons possibles
- 24. Zend Framework - toutes les erreurs sont indiquées
- 25. Quelles erreurs possibles puis-je espérer recevoir dans System.Net.Mail.SendCompletedEventHandler?
- 26. Quelles sont les causes possibles de "java.lang.OutofMemoryError" dans un thread en cours d'exécution?
- 27. Liste de toutes les exceptions SoapServer possibles
- 28. Faire toutes les combinaisons possibles d'URL avec la chaîne
- 29. Quelles sont toutes les méthodes de $ .couch que CouchApp simplifie?
- 30. Toutes les combinaisons possibles de jeux
Bien sûr, mais dans ce cas, le compilateur lance un avertissement qui vous invite à corriger le bogue avant d'aller plus loin. – SebGR
Il ya beaucoup de questions ici sur Stackoverflow où le programmeur n'a pas utilisé ces fonctionnalités de Fortran moderne et ne peut pas diagnostiquer le programme que le compilateur pourrait facilement trouver pour eux. –