Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Bład przy metodzie zwaracjącej wektor

Ostatnio zmodyfikowano 2016-10-26 16:45
Autor Wiadomość
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:
C/C++
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)
C/C++
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:
C/C++
typedef struct selectors_data {
    sf::RectangleShape square;
    int id;
    std::string name;
    sf::RenderWindow * parentwindow;
    sf::Text buttontext;
    std::string group;
    bool clicked = false;
};
P-152919
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 ?
P-152923
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
P-152925
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?
P-152936
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
P-152942
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.
P-152944
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;
P-152945
michal11
» 2016-10-26 16:27:46
Lepiej wrzuć więcej kodu bo tak zgadywać to możemy w nieskończoność.
P-152948
« 1 » 2
  Strona 1 z 2 Następna strona