Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Segmentation fault (core dumped)  (Przeczytany 3971 razy)

KelThuzad

  • Gość
Segmentation fault (core dumped)
« dnia: 2016-04-09, 19:14:56 »
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void zamiana (int a[] , int n )
{
    int i , j ,t;

        for ( i = 0 ; i < n-1 ; i++ )

            for ( j = 0 ; j <n-1-i ; j++ )

                if ( a[j] > a[j+1] )
                    {
                        t = a[j];
                        a[j] = a[j+1];
                        a[j+1] = t;
                    }

        return;
}

int main ()
{
    FILE *f;
    int tab[300000], i,j;
    long t1 , t2;
    srand (time(NULL));

    f = fopen ("/home/mateusz/Wsinf/Semestr_2/Algorytmy_i_Złożoność_Obliczeniowa/Pierwsze_Sprawozdanie_Finalna_Wersja/Babelkowe/Zmiennelosow/babelkowezmiennelosowe" , "wt" );

    for ( i = 50000 ; i <= 300000 ; i = i + 10000 )
        {
            for ( j = 0; j < i ; j++)
                tab[j] = rand();
                t1 = time(NULL);
                zamiana (tab , i);
                t2 = time(NULL);
                printf("oblicznono dla %d\n" , i);
                fprintf (f , "%d - %ld\n" , i , t2-t1 );
        }
        return 0;
}

Witam. Mój problem polega na tym że po uruchomieniu programu pokazuje mi się taki komunikat "Segmentation fault (core dumped)". Dopiero zaczynam programować i jedyne co udało mi się znaleźć na zagranicznych forach to to że może być to problem z pamięcią lub jakaś usterka systemu. I dlatego nie wiem co z tym zrobić.


Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Segmentation fault (core dumped)
« Odpowiedź #1 dnia: 2016-04-09, 22:36:07 »
Na pierwszy rzut oka jest wszystko OK.

Dlatego musisz zaprzyjaźnić się z kilkoma programami i parametrami:
* -ggdb - dodanie tego parametru do kompilacji umieszcza w pliku wynikowym szczegółowe dane do debuggowania
* valgrind - program umożliwiający szukanie problemów z pamięcią (podwójne zwolnienie, brak zwolnienia, pisanie poza obszarem zaalokowanym, itp)
* gdb - debugger, umożliwia uruchamianie i zatrzymywanie programu, grzebanie żywemu programowi w głowie i sekcję zwłok po padnięciu. GDM jest tekstowy, istnieje kilka nakładek graficznych na niego, w tym ddd, kdbg plus każde właściwie środowisko zintegrowane ma interfejs do gdb.

Puściłem program dla 2 ostatnich iteracji (290000 i 300000) i nie było problemów.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

KelThuzad

  • Gość
Odp: Segmentation fault (core dumped)
« Odpowiedź #2 dnia: 2016-04-11, 15:19:28 »
a jak program wykonuje na code blocks?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Segmentation fault (core dumped)
« Odpowiedź #3 dnia: 2016-04-11, 20:44:08 »
1. Odpuść sobie  code blocks, to gniot niemiłosierny.
2. Dla początkującego bardzo dobry jest QtCreator.
3. Znalazłem błąd (odruchowo go poprawiłem poprzednim razem):
Cytuj
Jak otwierasz plik, to sprawdzaj, czy rzeczywiście udało się go otworzyć :)

CodeBlocks nie potrafi zlokalizować mijsca segfaulta w kodzie (nie mam pojęcia czemu), QtCreator pokazuje wysypaną linijkę i zawartość wszystkich zmiennych w punkcie wysypania, a to jasno pokazuje co jest nie tak z programem (w tym przypadku).
« Ostatnia zmiana: 2016-04-12, 14:22:16 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Filystyn

  • Gość
Odp: Segmentation fault (core dumped)
« Odpowiedź #4 dnia: 2016-04-20, 23:02:27 »
Jak działasz na windzie to sypie Ci się stack bo masz powyżej 1 mb.

Takie duże tablice się alokuje. Pozdrawiam.

PS: int main( void )   <-- zgodnie z standartem C.   int main ()  tak wolno tylko w C++.

PS2: Lepiej załóż sobie irca i poszukaj kanału C i tam pytaj. Przeważnie szybka odpowiedź.
Polecam Ircnet, a tak serio to każda sieć z kanałem C poza ##C na freenode (absolutnie chory kanał szkoda się rozpisywać).
« Ostatnia zmiana: 2016-04-20, 23:09:45 wysłana przez Filys »