Access violation reading location mit cout
-
Hallo,
neues Problem, das bei mir für Unverständnis sorgt

srand ( time(NULL) ); int zahl = 0; for(int i=0; i < 10; i++) { zahl = rand(); cout << zahl+"\n" << endl; }Daraufhin fliegt jedesmal eine Exception: "Access violation reading location"
und es erscheinen skurile Ausgaben auf der Konsole.
Mit printf funktioniert das übrigens ohne Probleme, aber printf benutze ich jetzt nicht mehr
Was mache ich jetzt falsch?
-
das cout << zahl+"\n" << endl;
ist falsch.int und string können so nicht verkettet werden.
-
Wie kommst du darauf, den
operator+für das Zusammenhängen von Strings benutzen zu können?
Nimm dafür den Stream-Operator
<<. Das was du machst, ist nämlich zu einem Zeiger einenint-Offset zu addieren (Zeigerarithmetik). Die resultierende Adresse gehört nicht dir, und Zugriff darauf führt zu undefiniertem Verhalten.
-
Nexus schrieb:
Wie kommst du darauf, den
operator+für das Zusammenhängen von Strings benutzen zu können?
Java
- Das steckt so tief in mir drin^^Nimm dafür den Stream-Operator <<
for(int i=0; i < 10; i++) { zahl = rand(); //folge[i] = zahl; //printf("%d\n",zahl); string s = "Ergebnis: "; cout << s << zahl << endl; }So gut? Zumindest funktioniert es jetzt.
-
PeterFragt schrieb:
Java
- Das steckt so tief in mir drin^^Habe ich fast gedacht. Aber gewöhn dir gleich an, dein Wissen von Java zu verdrängen, während du C++ programmierst. Versuche auch nicht, bekannte Herangehensweisen 1:1 auf C++ zu übertragen, hier werden so viele Dinge anders gelöst.
PeterFragt schrieb:
So gut? Zumindest funktioniert es jetzt.
Ja, so gut. Aber du kannst das Stringliteral natürlich auch direkt bei
std::couteinsetzen, damit sparst du dir die Konstruktion eines unnötigenstd::strings:std::cout << "Ergebnis: " << zahl << std::endl;Aber falls du doch einmal Stringliterale speichern musst, reicht
const char*völlig, da brauchst du die dynamischen Eigenschaften vonstd::stringnicht.
-
danke erstmal!
-
Nexus schrieb:
.. Die resultierende Adresse gehört nicht dir, ...
bei mir funzt das auch nicht, obwohl die adresse mir gehört.
glaubste nicht? hab noch die quittung vom ram.