Problem mit try catch und boost::shared_array
-
:o schrieb:
std::vector<std::string>ich hab schon meinen grund warum ich ein array von chars nehme und nicht einen string.
Aber du hast schon recht, wenn alles nicht mehr funktioniert, werde ich versuchen es auf std::string umzuschreiben.Funktioniert std::string::c_str() eigentlich immer? Weil dazu müssten die Daten ja alle hintereinander im Speicher legen.
mfg.
-
ch hab schon meinen grund warum ich ein array von chars nehme und nicht einen string.
Weil du ein Frickler bist?
-
window schrieb:
ch hab schon meinen grund warum ich ein array von chars nehme und nicht einen string.
Weil du ein Frickler bist?
nein
-
Gibt nur einen Grund wo nen std::string für chars nicht geeignet ist und dort kann man nen vector (oder anderen container) nehmen.
-
joomoo schrieb:
Funktioniert std::string::c_str() eigentlich immer? Weil dazu müssten die Daten ja alle hintereinander im Speicher legen.
Ja, tut sie - und der Inhalt des string's steht hintereinander im Speicher.
-
Was für einen Fehler bekommst du denn? Notfalls mal debugger anwerfen - estartu hat ein schönes tutorial geschrieben...
@joomoo:
nur mal so als Anmerkung: boost::shared_array gibt dir eine performancegarantie, die du mit std::string nur implementationsspezifisch bekommst.
-
peterchen schrieb:
Was für einen Fehler bekommst du denn? Notfalls mal debugger anwerfen - estartu hat ein schönes tutorial geschrieben...
Gar keine, das Programm stürzt einfach ab. Die einzige rückmeldung ist der return wert von int main 1.
Was kann ich mit dem Debugger herrausfinden? Ich dachte da kann man das Programm anbestimmten stellen anhalten? Aber ich weiß schon, dass es an dieser Zeile liegt.
mfg.
-
Programmablauf abgucken, an der Absturzstelle verwendete Variablen angucken ob das was "komisch" ist. Wenn ja, gucken wo das herkommt.
Aber bei STL-Containern ist das schon recht schwierig...
Ich denke nicht, daß de Fehler an dieser Stelle liegt.
catch fängt nur C++ exceptions, zumindest soll es nur das. Harte Fehler (z.B. Schutzverletzung) fängst du damit nicht (VC6 hat das mal gemacht, das war aber nicht so geplant..).
Verwendest du einen debug build? Welche Entwicklungsumgebung? (Davon hängt halt ab, wie bestimmte Fehler aussehen)
vor dem Aufruf einfach mal lines durchgehen und auf die console rausgeben, ebenso temp.
wenn das geht, sollte auch deine Zeile gehen
-
joomoo schrieb:
Wie kann die boost::shared_array<T>::reset() Funktion abstürzen, wenn nich durch eine exception?!?
Wenn es vorher schon auf was zeigte, dann wird das ja freigegeben. Wenn das aber schon freigegeben wurde, dann schmiert er an der Stelle ab. Zeig doch mal, wie Du die Daten erstellst und in den vector reinfüllst. Vielleicht hast Du da irgendwo ne Temporäre Variable gebaut, die das Ding unabsichtlich freigibt.
-
CStoll schrieb:
joomoo schrieb:
Funktioniert std::string::c_str() eigentlich immer? Weil dazu müssten die Daten ja alle hintereinander im Speicher legen.
Ja, tut sie - und der Inhalt des string's steht hintereinander im Speicher.
Im Ergebnis von c_str() stehen die Zeichen (logischerweise) direkt hintereinander. Aber c_str() darf konvertieren, die interne std::string-Darstellung muss also nicht der C-String-Darstellung entsprechen. Insbesondere muss die interne std::string-Darstellung weder nullterminiert noch zusammenhängend sein (z.B. [1]).
Würde die interne Darstellung auf reine Nullterminierung bauen, könnte std::string gar keine Nullzeichen enthalten.