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?
-
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