dynamic_cast segmentation fault mit vector



  • Hi,

    folgender code:

    for( unsigned i = 0; i < recs.size(); i++ ) {
    
          Record* r = recs[i];
          vector<Record*> allElements;
          allElements.push_back(r);
    
          //hier würde der cast funktionieren
          Bla* tmp= dynamic_cast<Bla*>( r );
    
          for( unsigned u = 0; i < allElements.size(); u++ ) {
             //hier würde er einen segmentation fault produzieren
             Bla* tmp= dynamic_cast<Bla*>( allElements[u] );
          }
    }
    

    Kann mir das einer erklären?
    Gehen beim Einfügen in den vector irgendwelche Meta-Informationen verloren?


  • Mod

    Ein Cast an sich kann doch gar keinen Segfault produzieren?



  • Ohne viel zu schauen sehe ich das:

    for( unsigned u = 0; i < allElements.size(); u++ )
    

    Vielleicht ist u < allElements.size() besser.



  • Arcoth schrieb:

    Ein Cast an sich kann doch gar keinen Segfault produzieren?

    Glaube, ein dynamic_cast kanns. Der muss irgendwelche Zeiger auf aktuelle Typinformationen haben (vielleich in die vtbl eingebaut), und wenn der verbogen ist, knallts.



  • volkard schrieb:

    Arcoth schrieb:

    Ein Cast an sich kann doch gar keinen Segfault produzieren?

    Glaube, ein dynamic_cast kanns. Der muss irgendwelche Zeiger auf aktuelle Typinformationen haben (vielleich in die vtbl eingebaut), und wenn der verbogen ist, knallts.

    ich denke nicht. imho sollte nur dynamic_cast werfen dürfen



  • unskilled schrieb:

    volkard schrieb:

    Arcoth schrieb:

    Ein Cast an sich kann doch gar keinen Segfault produzieren?

    Glaube, ein dynamic_cast kanns. Der muss irgendwelche Zeiger auf aktuelle Typinformationen haben (vielleich in die vtbl eingebaut), und wenn der verbogen ist, knallts.

    ich denke nicht. imho sollte nur dynamic_cast werfen dürfen

    Nehmen wir mal

    Bla* b=reinterpret_cast<Bla*>(17);
    

    Meinste, der dynamic_cast kann ohne Segfault feststellen, welchen Typ das Objekt *b hat?



  • out schrieb:

    Ohne viel zu schauen sehe ich das:

    for( unsigned u = 0; i < allElements.size(); u++ )
    

    Vielleicht ist u < allElements.size() besser.

    Unter anderem deshalb verwendet man hier besser das range-based for.



  • oh. ging ja auch noch um dynamic_cast und nich reinterpret... sry


Anmelden zum Antworten