twój ostatni program najprawdopodobniej wywala bo nie może znaleźć pliku czytaj_mat
z liczbami zmiennoprzecinkowymi. Jak stworzyłem plik z kilkoma linijkami liczb zmiennoprzecinkowych to program ruszył i wyświetlił liczby z pliku plus 1 ekstra śmieć, który wynika z niepoprawnego użycia i++
, więc musisz to naprawić.
Do debugowania kompiluj program z opcją -g
. W dystrybucji Debian możesz zatrzymać demon apport.service
, który uniemożliwia zrzucaniu coredump
w katalogu z programem, tylko zrzuca je do plików *.crash
w /var/crash/
:
$ sudo systemctl stop apport.service
$ ulimit -c unlimited
następnie uruchamiasz program, on zrzuca pamięć do pliku core
a ty wtedy uruchamiasz:
gdb ./plik2 core
a w nim polecenie bt
albo bt -ful
. Oto wynik przy braku pliku z danymi:
(gdb) bt -ful
#0 _IO_feof (fp=0x0) at feof.c:35
result = <optimized out>
__self = <optimized out>
...
#1 0x000056432e38a258 in czytaj_wektor (A=0x7ffc9dec1a30, maksymalny_rozmiar=100) at plik2.c:8
i = 0
plik_dane = 0x0
#2 0x000056432e38a2a7 in main () at plik2.c:22
A = {0, 0, 6.9526379120288772e-310, 0, 0, 0, 6.94639310699066e-310, 6.9463931164644676e-310,
6.9526379120288772e-310, 6.9463931068902659e-310, 6.9463931070177348e-310, 6.9463931069503443e-310,
... 6.9463931022330055e-310, 4.6860416181857899e-310, 0, 4.6860416181597033e-310}
i = 805272240
rozmiar = 32735
zauważ, że funkcji feof
został podany NULL
, bo nie sprawdziłeś czy fopen
się powiódł i do zmiennej plik_dane
został przypisany NULL