• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Segmentation fault po poprawnym otwarciu pliku.

Object Storage Arubacloud
0 głosów
158 wizyt
pytanie zadane 5 sierpnia 2016 w C i C++ przez Pac Plus Mądrala (5,560 p.)
zamknięte 5 sierpnia 2016 przez Pac Plus

Hey.

Napisałem właśnie klase do prostej animacji poklatkowej tła w jednym z programów. Mam problem z funkcją która ma wczytać ścieżke do tektury z pliku tekstowego. To znaczy plik się wczytuję i przechodzi test ale przed zwróceniem wartości ( ścieżki do tekstury ) pojawia się 'segmentation fault'. Ciężko mi wnioskować przyczyny, może ktoś z was szybciej myśli :)? Tu jest część kodu w której implementuję wspomniany mechanizm:

#include "ani_background.h"
#include <iostream>
#include <allegro5/allegro.h>
#include <string>

AniBackground::~AniBackground()
{
    delete spirite_path;
    al_destroy_bitmap(texture);
}

std::string AniBackground::LoadPath()
{
    std::string item;
    file.open( "./.program.conf" );
    if( file.good() )
        std::cout << "Open program configuration file." << std::endl;
    else{
        std::cout << "Program configuration file opening error! " <<
        "Please check if file '.program.conf' exists!" << std::endl;
        exit(1);
    }

    int counter = 0;
    while ( !file.eof() ){
        file >> item;
        counter ++;
    }
    file.close();

    if ( spirite_path[0] == '.' && counter == 1 ){
        std::cout << "Returning path to the program..." << std::endl;
        return item;
    }
    else{
        std::cout << "Path to spitite sheets needs to be executed by " <<
                     "'./'. File should contain one line of texture path!" << std::endl;
        exit(1);
    }
}

void AniBackground::Init(){
    frameBox.fW     =       352;
    frameBox.fH     =       240;
    frameBox.fX     =       0;
    frameBox.fY     =       0;
    //*************************
    fX              =       0;
    fY              =       0;
    cur_frame       =       0;
    max_frame       =       26;
    spirite_path    =       LoadPath().c_str();
    texture         =       al_load_bitmap( spirite_path );
}

[...]

Output z działąnia (czy bardziej z niedziałania) programu:

Open program configuration file.
Segmentation fault (core dumped)

 

komentarz zamknięcia: Uzyskałem odpowiedź.

1 odpowiedź

+1 głos
odpowiedź 5 sierpnia 2016 przez obl Maniak (51,280 p.)
wybrane 5 sierpnia 2016 przez Pac Plus
 
Najlepsza

To:

file.eof()

zwraca prawdę, gdy osiągnięto koniec pliku, a fałsz w przeciwnym przypadku, więc niczego nie odczytałeś z twojego pliku.

komentarz 5 sierpnia 2016 przez Pac Plus Mądrala (5,560 p.)

Już zedytowałem pytanie, zapomniałem o negacji w pętli, ale to dalej nic nie zmienia, na końcu funkcji przecież testuje zawartość a segmentation fault pojawia się przed zdaniem raportu.

while ( !file.eof() )

komentarz 5 sierpnia 2016 przez obl Maniak (51,280 p.)

Ta linijka:

spirite_path    =       LoadPath().c_str();

mi się nie podoba. sprite_path to jest char*? Nie możesz tak przypisywać danych. Lepiej będzie, jak użyjesz typu string a jak będziesz potrzebował łańcucha znaków char* to użyjesz wtedy sprite_path.c_str() i tyle. Bo w tym przypadku musiałbyś najpierw zarezerwować odpowiednią ilość miejsca w pamięci za pomocą operatora new a następnie skopiować to co funkcja LoadPath() ci zwróciła.

komentarz 5 sierpnia 2016 przez Pac Plus Mądrala (5,560 p.)
Masz rację, dzięki ;).

Podobne pytania

+1 głos
1 odpowiedź 735 wizyt
pytanie zadane 19 maja 2016 w C i C++ przez draghan VIP (106,230 p.)
0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 19 grudnia 2015 w C i C++ przez emSon Stary wyjadacz (10,480 p.)
0 głosów
1 odpowiedź 217 wizyt
pytanie zadane 15 sierpnia 2016 w C i C++ przez ignacjusz Bywalec (2,390 p.)

92,619 zapytań

141,468 odpowiedzi

319,786 komentarzy

62,001 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...