Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Segmentation fault przy wczytywaniu z pliku do tablicy

$
0
0

Cześć,

muszę stworzyć w C program do obróbki obrazów w formacie PGM, który będzie je odczytywał z pliku do tablicy i wykonywał na nich różne operacje. Napisałem wszystkie funkcje do obróbki i funkcje odczytu z pliku i zapisu. Program kompiluje się poprawnie, ale przy próbie wczytania obrazu, po podaniu nazwy, kończy się błędem "segmentation fault". Dodam, że kompilowałem za pomocą GCC na Linuksie.

Funkcja i wywołanie wczytania wyglądają tak:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 512         // maksymalny rozmiar obrazu
#define DL_LINII 1024   // dlugosc buforow pomocniczych

// ODCZYT OBRAZU Z PLIKU DO TABLICY:
int czytaj (FILE *plik_wej, int obraz_pgm [][512], int *wymX, int *wymY, int *szarosci)
{
    char buff [DL_LINII];   // bufor pomocniczy
    int znak;               // zmienna pomocnicza
    int koniec;             // monitorowanie konca danych w pliku
    int i, j;

    // KONTROLA POPRAWNOSCI PLIKU:
    if (plik_wej == NULL)
    {
        fprintf (stderr, "Blad: podany plik jest nieprawidlowy!\n");
        return 0;
    }

    // "NUMER MAGICZNY":
    if (fgets (buff, DL_LINII, plik_wej) == NULL)   koniec = 1;     // wczytanie pierwsze linii z pliku
    if (buff [0] != 'P' || buff [1] != '2' || koniec)
    {
        fprintf (stderr, "Blad: podany plik nie jest plikiem PGM!\n");
        return 0;
    }

    // POMIJANIE KOMENTARZY:
    do {
        if ((znak = fgetc(plik_wej)) == '#')
        {
            if (fgets(buff, DL_LINII, plik_wej) == NULL)    koniec=1;
            else    ungetc(znak, plik_wej);
        }
    } while (znak == '#' && !koniec);

    // POBRANIE PARAMETROW OBRAZU:
    if (fscanf (plik_wej, "%d %d %d", wymX, wymY, szarosci) != 3)
    {
        fprintf (stderr, "Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
        return(0);
    }

    // ZAPISANIE OBRAZU W TABLICY:
    for (i=0; i<*wymY; i++)
    {
        for (j=0; j<*wymX; j++)
        {
            if (fscanf(plik_wej, "%d " ,&(obraz_pgm [i][j])) != 1)
            {
                fprintf (stderr, "Blad: Niewlasciwe wymiary obrazu\n");
                return(0);
            }
        }
    }
    return *wymX * *wymY;
}

/************************************/

switch (Wybor)
    {
        // WCZYTANIE:
        case 1:     CzyWczytany = 0;
                    printf ("Podaj nazwe pliku: ");
                    scanf ("%s", &nazwa_wej);
                    printf ("%s", nazwa_wej);
                    plik = fopen (nazwa_wej, "r");
                    if (czytaj (plik, obraz, &wymX, &wymY, &szarosci) != 0);
                    printf ("Obraz wczytany pomyslnie\n");
                    CzyWczytany = 1;
                    fclose (plik);
                    break;

/**********************************/

A gdyby to nie wystarczyło, to tak wygląda cały program:   http://pastebin.com/WHKGVe4i

Z góry wielkie dzięki za pomoc.

 


Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra