2010-12-13 6 views
0

Chaque fois que j'attribue une nouvelle valeur à un paramètre, j'obtiens une erreur de bus. Je ne vois pas comment je pointe vers une mémoire inexistante. Je devrais avoir accès à cette adresse, comme elle est déclarée dans la liste des paramètres, sauf si Fortran ne permet pas de modifier les paramètres sans une déclaration spéciale. Le reste de mon code fonctionne sans erreur. Je l'ai isolé à cette tâche.Erreur de bus Fortran lors de la modification du paramètre

Je suis en gfortran (pas la version, hors main) du terminal dans OS X.

SUBROUTINE p_list (c_number, c_matrix) 
    INTEGER  c_number 
    INTEGER  c_matrix(8000,20) 
! ... 
    c_number = 1000 
! ... 
END SUBROUTINE p_list 
+3

Comment appelez-vous cela? Je ne connais pas les FORTRAN modernes, mais je sais qu'avec les versions antérieures de FORTRAN, vous pouvez planter un programme comme ça en transmettant une constante (par exemple, en appelant 'p_list (0, my_matrix)'). C'est parce que FORTRAN a implicitement passé tout par référence, y compris les constantes (!) –

+0

En fait, super attraper. L'appel de main était une ligne de test de code utilisant une constante. Le remplacer par un INTEGER déclaré dans l'appel, semblait faire l'affaire! Promouvoir ce commentaire à une réponse, et je vais le sélectionner comme le gagnant. ;) –

+0

Je ne suis pas sûr si je veux "gagner" une question FORTRAN, mais OK ;-) –

Répondre

3

Comment appelez-vous cela? Je ne connais pas les FORTRAN modernes, mais je sais qu'avec les versions antérieures de FORTRAN, vous pouvez planter un programme comme ça en transmettant une constante (p. Ex. En appelant p_list (0, my_matrix)). C'est parce que FORTRAN a implicitement passé tout par référence, y compris les constantes (!)

Questions connexes