Szustarol Temat założony przez niniejszego użytkownika |
Bład przy metodzie zwaracjącej wektor » 2016-10-25 21:10:41 Witam! Jak sobie wywołam metodę mającą zwracać wektor dostaję błąd double free or corruption (out): 0x00007fff653b8330 ***
Metoda wyglada tak: std::vector < int > selector::getselectedids() { std::vector < int > temp; for( int i = 0; i < selectors.size(); i++ ) if( selectors[ i ].clicked == true ) temp.push_back( selectors[ i ].id ); return temp; }
wywolana jest tak: (fragment kodu sfml) sf::RenderWindow * setup = new sf::RenderWindow( sf::VideoMode( 650, 600 ), "test" ); selector * presetupselectors = new selector; presetupselectors->createnew( 200, 100, "test", 0, 450, setup, { 0, 0, 255 }, true, "test" ); presetupselectors->createnew( 200, 100, "test2", 200, 450, setup, { 0, 0, 255 }, true, "test" ); std::vector < int > clicked; while( setup->isOpen() ) { clicked = presetupselectors->getselectedids(); while( setup->pollEvent( event ) ) {
głowię się już z godzinę i nie moge wykombinować, proszę o pomoc Metoda ma zwracac id z vektora selectors. Dodam ze selectors jest wektorem struktury ktora wyglada tak: typedef struct selectors_data { sf::RectangleShape square; int id; std::string name; sf::RenderWindow * parentwindow; sf::Text buttontext; std::string group; bool clicked = false; };
|
|
michal11 |
» 2016-10-25 21:55:18 Coś innego musi powodować ten błąd, ale jest za mało kodu żeby go zreprodukować. Na pierwszy rzut oka to co wkleiłeś wygląda ok. Jak wywalisz linijkę clicked = presetupselectors->getselectedids(); to wszystko odziała dobrze ? |
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-10-25 22:22:18 tak dziala dobrze jesli typem zwracanym jest np int to tez sie nie wywala |
|
j23 |
» 2016-10-26 11:02:25 Czy ten adres podwójnie zwalniany nie jest adresem setup?
To wszystko działa w jednym wątku? |
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-10-26 13:43:06 Tak, to wszystko w 1 wątku chyba że sfml sobie robi sam jakieś wątki o których nie wiem wywolanie std::cout << "Adres setup: " << & setup << std::endl; zwaraca Adres setup: 0x7ffdd3d20b48 *** Error in `/home/karol/Dokumenty/UTE2/UTE/bin/Debug/UTE': double free or corruption (out): 0x00007ffdd3d20ae0 ***
czyli to nie ten adres |
|
j23 |
» 2016-10-26 14:24:18 Panie kolego, ale to, co wypisuje cout, to adres zmiennej setup, a nie adres obiektu klasy sf::RenderWindow. Ja pytałem o adres obiektu, który jest przechowywany we wspomnianym wskaźniku. Sprawdź jeszcze raz. |
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-10-26 14:44:25 Adres setup: 0x2210120 double free or corruption (out): 0x00007ffd08bdb9f0 *** po wypisaniu cout << setup;
|
|
michal11 |
» 2016-10-26 16:27:46 Lepiej wrzuć więcej kodu bo tak zgadywać to możemy w nieskończoność. |
|
« 1 » 2 |