Segmentation fault, gdy funkcja zwraca vector
Ostatnio zmodyfikowano 2014-01-23 19:57
pekfos |
» 2014-01-23 19:00:13 A jak wywalisz wywołanie open(), konstruktor i destruktor, to działa? |
|
Chlorek Temat założony przez niniejszego użytkownika |
» 2014-01-23 19:05:24 Wywołanie open() jeszcze rozumiem ale że niby jak konstruktor? Przecież muszę utworzyć obiekt (a wtedy i wywoła się konstruktor), chyba że metody będą statyczne. |
|
pekfos |
» 2014-01-23 19:08:54 Przecież muszę utworzyć obiekt |
Nie musisz w klasie definiować własnego konstruktora. Miałeś podać kompletny kod wywołujący problem. Po przekopiowaniu tego, co podałeś i dopisaniu kilku pustych metod, kod działa. |
|
Chlorek Temat założony przez niniejszego użytkownika |
» 2014-01-23 19:14:13 Ah, zrozumiałem to jako "wywalić wywołanie [...] konstruktor(a)". Wiem, niby nie logicznie ale tak pomyślałem. W każdym razie, zrobiłem tak jak poleciłeś (wywaliłem konstruktor i destruktor), ale zostawiłem open() - wynik test: wszystko zdaje się działać. Dlaczego? Mój konstruktor: Config::Config() { this->opened = false; this->filePath = ""; } I drugi konstruktor: Config::Config( std::string path ) { this->open( path ); }
Natomiast destruktor jest pusty. |
|
pekfos |
» 2014-01-23 19:15:39 A destruktor i open()? |
|
Chlorek Temat założony przez niniejszego użytkownika |
» 2014-01-23 19:21:09 Napisałem, że destruktor jest pusty. Natomiast funkcja open() wygląda tak: bool Config::open( std::string path ) { this->filePath = path; pugi::xml_parse_result result = this->xmldoc->load_file( filePath.c_str() ); if( result ) { Mystour::getLogger( LoggerType::Info ).print( "Config file \"" + filePath + "\" loaded successfully!" ); this->opened = true; return true; } Mystour::getLogger( LoggerType::Error ).print( "Failed to load/parse config file \"" + filePath + "\"!\n\tDetails: " + result.description() + "\n\tat: " + boost::lexical_cast < std::string >( result.offset ) ); this->opened = false; this->filePath = ""; return false; }
Jednak wywołanie open() nie powoduje żadnych błędów i program normalnie działa (oczywiście po wywaleniu konstruktorów). Z konstruktorami też nie powoduje crashu, ale już wywołanie getString() tak. |
|
Chlorek Temat założony przez niniejszego użytkownika |
» 2014-01-23 19:39:09 Sprawa robi się coraz dziwniejsza, zrobiłem parę poprawek (jedynie kosmetyczne, wywalenie konstruktorów których już nie używam i destruktora) i... przestaje działać program. Tym razem w innym miejscu, mianowicie crashuje w open() w miejscu: pugi::xml_parse_result result = this->xmldoc->load_file( filePath.c_str() ); Co jest grane? Nie było tu wcześniej jakichkolwiek błędów... #Edit Błedu wcześniej nie było (w nic nie ruszałem w tej funkcji), ale postanowiłem nie robić z xmldoc'a wskaźnika i... zadziałało. Dziwne, jak to programowanie czasami jest nie do pojęcia dla mnie... |
|
pekfos |
» 2014-01-23 19:41:06 A gdzie nadajesz wartość xmldoc? |
|
1 « 2 » 3 |