• 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.

Cloud VPS
0 głosów
227 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,300 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,300 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ź 1,107 wizyt
pytanie zadane 19 maja 2016 w C i C++ przez draghan VIP (106,230 p.)
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 19 grudnia 2015 w C i C++ przez emSon Stary wyjadacz (10,480 p.)
0 głosów
1 odpowiedź 280 wizyt
pytanie zadane 15 sierpnia 2016 w C i C++ przez ignacjusz Bywalec (2,390 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 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

Kursy INF.02 i INF.03
...