Ich erstelle ein Diagramm mit der Adjazenzlistenmethode. Jeder Knoten wird als ein Knoten dargestellt, der auf andere Knoten zeigt, die damit verbunden sind. Im Folgenden ist mein CodeSegmentierungsfehler in Fortran beim Erstellen eines Graphen mit Adjazenzlisten
program main
use graphs
implicit none
type(node),pointer :: start
type(node), dimension(:), pointer :: grp
integer :: n, ios=0, a,b, i
open(1, file='test6.txt', status='OLD', action='READ')
read(1,*,iostat=ios) n
allocate(start)
allocate(grp(n))
do, i=1,n
grp(i)%val=i
enddo
do while(ios==0)
read(1,*, iostat=ios)a,b
if(ios.NE.0)then
exit
endif
start => grp(a)
call add(start, b)
start => grp(b)
call add(start, a)
end do
end program main
Das Modul Graph ist als
folgtmodule graphs
type node
integer :: val
type(node), pointer :: next
end type node
contains
subroutine add(strt, nxn)
implicit none
type(node), pointer :: strt, new_node, lst
integer :: nxn
allocate(new_node)
allocate(lst)
lst => strt
new_node%val = nxn
new_node%next => NULL()
do while(associated(lst%next))
lst => lst%next
enddo
lst%next => new_node
end subroutine add
end module graphs
Datei test6.txt
ist wie folgt
43
1 2
1 10
2 3
2 11
3 4
4 5
5 6
6 7
7 8
8 9
3 12
4 13
5 14
6 15
7 16
8 17
9 18
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
10 19
11 19
12 20
Ich erhalte die folgenden Fehler
Program received signal SIGSEGV: Segmentation fault - invalid memory
reference
Backtrace for this error:
#0 0x7f786df6bef7 in ???
#1 0x7f786df6b12d in ???
#2 0x7f786dbbc4af in ???
#3 0x401db0 in __graphs_MOD_add
at /home/nav/MS project/new/grph.f90:18
#4 0x400f48 in ???
#5 0x400f85 in ???
#6 0x7f786dba782f in ???
#7 0x400a18 in ???
#8 0xffffffffffffffff in ???
Segmentation fault (core dumped)
Das Abov Das Programm läuft problemlos für kleine Graphen, aber nicht für große Graphen. Ich kann nicht verstehen, was ich falsch mache. Ich benutze den Gfortran-Compiler.
was ist das für 'allokieren (l (n))'? "l" scheint nirgendwo deklariert oder benutzt zu werden. – agentp
Könnten Sie uns helfen, indem Sie zeigen, welche Zeile 'project/new/grph.f90: 18' ist? – Brick
@agentp Ich habe dieses Array zuvor verwendet. Ich vergesse das zu löschen. – Neobux