2013-03-14 2 views

Répondre

1

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 
0

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.

+0

Bien sûr, mais dans ce cas, le compilateur lance un avertissement qui vous invite à corriger le bogue avant d'aller plus loin. – SebGR

+0

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

Questions connexes