Abbruch bei Zugriff auf STL vector Element. Warum?



  • Oder einen pointer?



  • Die Frage ist doch hauptsächlich, was die Lib mit der Sammlung von C-Strings anfängt und wie du vor und zwischen den Lib-Aufrufen die C-Strings erstellst/manipulierst. Je nachdem würde ich eine simple Wrapperklasse für C-Strings schreiben, einen Container, der die Dinger verwaltet, und eine Möglichkeit, aus dem Container den benötigten std::vector<char*> zu holen.



  • pumuckl schrieb:

    Die Frage ist doch hauptsächlich, was die Lib mit der Sammlung von C-Strings anfängt [...]

    👍

    Falls die Lib-Schnittstelle wirklich so aussieht:

    void irgendeine_lib_funktion(vector<char*> const& param);
    

    und sich diese Funktion die Zeiger weder "irgendwo anders" über den Funktionsaufruf hinaus speichert, noch über sie die Zeichenketten ändern will, dann würde ich wahrscheinlich auch temporär einen solchen Vektor anlegen und ihn per reinterpret_cast mit Zeigern befüllen, die ich über string::c_str von string-Objekten bekomme, die lang genug leben. Das ist zwar unschön, aber was soll man auch groß anders machen, mit so einer Schnittstelle?

    Dass dann in einer Klasse zu kapseln, wie Pumuckl vorschlägt, klingt auch nicht doof.



  • krümelkacker schrieb:

    ....reinterpret_cast mit Zeigern befüllen, die ich über string::c_str von string-Objekten bekomme, die lang genug leben.

    Jo, das deren Destruktor dann selbstverständliche Sachen macht...
    Wenn mich aber nicht alles täuscht, nimmt man da nicht const_cast (oder ich kapier nich' was du machen willst)?


Anmelden zum Antworten