Je rencontre un comportement très étrange quand je fais cela. Je suppose que c'est l'origine de la question, mais je peux me tromper. Si l'un de vous peut le confirmer est en effet un comportement non défini, je au moins savoir ce qui se passeComportement non défini pour le tableau épissé intention (out) dans fortran 90?
suppose que je (ne prétend pas compiler)
subroutine X
real, allocatable :: block(:,:)
allocate(block(20,20))
call Sub(block(1:5, 1:5))
! here is undefined behavior
end subroutine
subroutine Sub(b)
real, intent(out) :: b(:,:)
b = 0.0
end subroutine
Ma question est: ce que je fais quelque chose de bizarre ? J'ai le sentiment que l'intention (out) indéfinit le bloc entier, même si j'ai passé une tranche, et j'ai besoin d'un inout. Pouvez-vous confirmer de la norme?
Édition: inout donne le même comportement indéfini, mais en passant un tableau non découpé à des sous-travaux. Cela signifie-t-il que c'est une violation de la norme de passer des tableaux tranchés pour l'initialisation de sous-blocs?
Merci
J'ai une interface explicite. J'ai simplement omis le code non pertinent pour le problème en question. Le comportement indéfini libère (ou réaffecte, ou envoie à la mémoire aléatoire) un pointeur contenu dans un type qui n'est pas du tout touché par le code. –
Pourriez-vous nous fournir un morceau de code qui reproduit le problème alors? – steabert
Ça va être très dur. Cependant, j'ai juste travaillé autour du problème, donc à ce stade est juste une curiosité. –