string to int

Moin,

ganz einfach, weil Du so Deinen Speicher kaputt schriebst!

Auszug aus der Hilfe zu "itoa":
The _itoa function convert the digits of the given value argument to a null-terminated character string and stores the result in string.

buffer ist hier nur 3 Zeichen lang ist; 100000 sind in hex aber auch schon 3 Byte und dann PLUS '\0'. Passt also nicht!

Gruß
Klaus
 
buffer ist hier nur 3 Zeichen lang ist; 100000 sind in hex aber auch schon 3 Byte und dann PLUS '\0'. Passt also nicht!

Gruß
Klaus
interessant, vielleicht eine dumme Frage noch::-(
Es ist mir schon klar, so was macht den Speicher kaputt, aber was kann es noch führen, wenn man nen Speicher kaputt schreibt?
 
Moin,

oha, das ein gaaaaanz weites Thema mit Dutzenden von Möglichkeiten!

Im Prinzip immer dann, wenn der Speicher anders beschrieben wird als allokiert, dann gibt es (oder besser: kann es) Probleme geben.

Im Beispiel hier ist ja so: es wird ein Byte mehr geschrieben, als für buffer allokiert ist. Nun kann dieses nächste Byte zufällig unbelegt sein (ergo: es ist zunächst nicht kritisch). Wenn aber dieses Byte das erste Byte einer völlig anderen Variable ist, kann auf diese schon nicht mehr zugegriffen werden
und es knallt (resp. liefert ggf. Blödsinn).

Wenn ich andersrum über den allokierten Bereich rausschreibe und dieser Teil wird danach von einer anderen Variable wieder überschrieben (da das System ja glaubt, der Speicher sei unbelegt) dann ist Deine erste Variable buffer kaputt.

Die jeweiligen Auaswirkungen bemerkt man jedoch u. U. erst "Stunden" später, wenn man wieder auf den jew. Bereich zugreift! Und wenn es dann zu einem scheinbar unkontrollierten Absturz kommt, dann such' mal die Ursache dafür .....

[EDIT] Greift man diese Bereiche bis Programmende nie wieder zu, fällt der Fehler nicht mal auf ....

gruß
Klaus
 

Neue Beiträge

Zurück