String Fehler SIGABRT
-
Hallo,
ich habe folgendes Problem. Bei folgendem Programm kommt während der Laufzeit folgender Fehler, wenn ich eine Eingabe mache und diese in einem String speichern möchte:
Welcome to Client v0.0.2 $: te client(1986) malloc: *** error for object 0x100005240: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug Program received signal: “SIGABRT”. sharedlibrary apply-load-rules all
Beim Compilen kommt keine Fehlermeldung, sondern erst zur Laufzeit. Compiler ist der default-Compiler von Mac OSX 10.5, aktuelle Version.
Hier der Sourcecode:#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string> using namespace std; int main (int argc, char * const argv[]) { string userinput; // Eingabe von Benutzer cout << "Welcome to Client v0.0.2" << endl; // Willkommensnachricht an User for (;;) { cout << "$: " ; // Eingabeaufforderung an User cin >> userinput; // <-- hier ist der Fehler !!! ... } return 0; }
Wenn mich nicht alles täuscht, müsste der Code soweit eigentlich richtig sein. Ich habe keine Ahnung wo der Fehler herkommt. Kann mir jemand weiterhelfen?
-
Dann zeig mal was danach noich an Code kommt.
-
Im Moment kommt anschließend nur das:
cout << "Die Eingabe war: " << userinput;
Alles andere was Fehler verursachen könnte ist auskommentiert.
Der Fehler liegt in der entsprechend markierten Zeile, denn wenn ich diese auskommentiere läuft das Programm ohne Fehler.
-
Müsste das nicht heißen:
cout << userinput.c_str();
-
Oberon00 schrieb:
Müsste das nicht heißen:
cout << userinput.c_str();
Ähm warum das?!?
Natürlich gibt es einen operator<< für std::string.
Und darum braucht es kein ".c_str()".Der Fehler liegt irgendwo versteckt, entweder ist der Code nicht komplett, oder der Compiler macht Mist...
Im geposteten Code ist nichts falsch.
-
hmm also letzteres sollte richtig sein... Funktioniert auch wunderbar wenn ich dem string vorher mit
userinput = "bla"
einen Wert zuweise.
Ich möchte den String ja nicht in einen c-String (Char-Array) umwandeln.
Der Fehler kommt im Übrigen auch dann, wenn ich die Zeile auskommentiere. Damit kann der Fehler eigentlich nur in der o.g. Zeile sein.
Im Moment gehe ich den Umweg die Eingabe mit scanf() auslese und den resultierenden c-String dann in einen C++-String umwandle. Funktioniert zwar, ist aber unschön.Edit: Habe inzwischen auch einen anderen Post entdeckt, wo das gleiche Problem auftrat, ebenfalls unter Mac OS X mit Xcode. Da hat es funktioniert, wenn man den Code nicht aus der IDE mit dessen standard-Compiler (Apple Eigenentwicklung?) kompiliert, sondern gcc nimmt. Scheint also ein Compilerfehler zu sein.
-
NUR dieser Code
#include <iostream> #include <string> using namespace std; int main (int argc, char * const argv[]) { string userinput; cout << "Welcome to Client v0.0.2" << endl; for (;;) { cout << "$: " ; cin >> userinput; } return 0; }
..und zwar wirklich NUR das, führt zu einem Fehler?
-
Ich hatte so ein Problem auch.
Der Compiler gab keinen Fehler aus, doch die Exe lief nicht, war ein sehr kleines Programm.
Nunja, hab den Compiler mal zu gemacht, PC neu gestartet und das Programm nochmals kompiliert, et voila!
-
@brotbernd
Jepp, gleicher Fehler. Compilen geht ohne Probleme, aber sobald ich dann eine Eingabe mache wars das.@Samyboy
Schon probiert. Neustart von Programm und OS bringen nichts.
-
Probier mal, ob
std::getline(std::cin, userinput);
funktioniert.
Sollte das auch nicht funktionieren, dann enthält vermutlich die Implementierung von
std::cin
einen Fehler.
-
Leider gleicher Fehler. Habe ich auch vorher schon ausprobiert
Interessant ist nur, dass es bisher scheinbar keinen offiziellen Bugreport Seitens Apple gibt. Der Fehler tritt offenbar erst seit dieser Version des Compilers auf, die vor einigen Tagen rauskam...