Nowe posty

xx konfiguracja sieci domowej (6)
Wczoraj o 23:58:47
clip Brak możliwości instalacji aplikacji na Opensuse Tumbleweed. (2)
Wczoraj o 23:35:02
xx petla while (11)
Wczoraj o 22:14:49
xx Repozytoria Archa (7)
Wczoraj o 21:43:06
xx Ktoś zna datę przejścia Minta 19.3 z bety do oficjala? (47)
Wczoraj o 14:28:28
xx Jak,Zrobić kopię całego dysku? (3)
Wczoraj o 08:39:41
xx Jaki linux na laptop/tablet hybrydowy? (11)
Wczoraj o 08:16:56
xx Brak rozdzielczości 16:9 ubuntu 19.04 (1)
Wczoraj o 01:46:25
xx Dziwne połączenia sieciowe! Co to jest? (14)
2019-12-13, 22:59:42
xx Conky - obraz z kamerki (11)
2019-12-13, 19:09:59

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

Offline MateuszA

  • Users
  • Użytkownik
  • **
  • Wiadomości: 70
    • Zobacz profil
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: 2545
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • keybase.io/pkraszewski
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
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline MateuszA

  • Users
  • Użytkownik
  • **
  • Wiadomości: 70
    • Zobacz profil
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: 2545
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • keybase.io/pkraszewski
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
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline Filys

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 28
    • Zobacz profil
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 »