Undefiniert?
-
Sicher?
Im Debugmodus bekomme ich "uninitialized local variable used", aber nur bei einzelnen Variablen, nicht aber bei Arrays... und das ist ja auch nur ne Warnung, welche allerdings im Debugmodus zum Programmende führt.
-
Hallo,
also bei mir funktioniert das Programm. Ich bekomme auch keinen Fehler/keine Warnmeldung bem Kompilieren. Mich würde nur interessieren warum unsinged als Typangabe ausreicht (siehe Forschleife: unsinged i; ... )
Mit freundlichen Grüßen
DerRatlose
-
hm, Ich glaube da dürfte nichts Initialisiert werden was es nicht darf.
Es dürfte nicht zum Absturz kommen.Aber meinst du, die Zeit die du sparst, lohnt der Absicherung wegen? Die 512 nullen sind ja schnell initialisiert...
-
DerRatlose schrieb:
also bei mir funktioniert das Programm. Ich bekomme auch keinen Fehler/keine Warnmeldung bem Kompilieren.
Ja, deshalb frage ich ja ob es eventuell undefiniert ist.
DerRatlose schrieb:
Mich würde nur interessieren warum unsinged als Typangabe ausreicht
(unsigned == unsigned int) is TRUE
XHansWurstX schrieb:
hm, Ich glaube da dürfte nichts Initialisiert werden was es nicht darf.

-
Nepomuk schrieb:
Hey Leute!
Dieses Verhalten ist doch nicht undefiniert, oder?
...
was noch drin steht ist doch egal ..."egal" != "definiert"
... und was Du unter "Verhalten" verstehst, wäre auch interessant.
Die Ausgabe ist jedenfalls undefiniert. Dass eine Ausgabe passiert (und dass sie den Inhalt von arr ausgibt) ist aber definiert.
(Würde ich aber trotzdem nicht machen. Initialisierungen sind nicht zum "sparen" da)Gruß,
Simon2.
-
Na, ja, also ich meine dass das Programm im Release- Build deswegen abstürzen könnte, wenn es auf einen Wert zugreift, welcher noch nicht explizit von mir überschrieben, sondern nur der Speicher dafür reserviert wurde.
-
Nepomuk schrieb:
wenn es auf einen Wert zugreift, welcher noch nicht explizit von mir überschrieben, sondern nur der Speicher dafür reserviert wurde.
Das meinte ich.
Da du den Speicher anforderst, ist er in dem Fall ja für dich vorgesehen.
Afaik wird der Speicherinhalt in diesem fall in ein char gecastet, deshalb entsteht dann dieser ascii-Müll.
-
Nepomuk schrieb:
Na, ja, also ich meine dass das Programm im Release- Build deswegen abstürzen könnte, wenn es auf einen Wert zugreift, welcher noch nicht explizit von mir überschrieben, sondern nur der Speicher dafür reserviert wurde.
Sollte eigentlich nicht passieren. Zumindest bei
intsteht dann da halt ein willkürliches Bitmuster, das irgendeine Zahl repräsentiert. Bei Fliesskommazahlen gibt es einige Spezialfälle (NaNs etc.), da sollte man schon eher aufpassen. Aber ganz sicher bin ich mir diesbezüglich auch nicht, weil ich selten mit nicht initialisierten Variablen arbeite und noch seltener vorsätzlich.Aber bist du auch einer von der Sorte "Initialisieren spar ich mir, ich will Performance..."? Es hat nämlich absolut keinen Sinn, lesend auf ein nicht initialisiertes Array zuzugreifen. Die paar Mikrosekunden wirst du wohl schon noch haben.
-
Hmm ok danke, und ihr habt mich überzeugt. Werde davor einfach initialisieren.
-
Moment mal, mir fällt gerade ein, dass im (ich betone) C-Stil keiner ein strcpy o.ä in diesem Fall vor dem sprintf macht:
int x=100; char buffer[128]; sprintf(buffer,"%d",x); // Ich weiß, C, aber keiner initialisert hier buffer // oder????Also muß man nicht initialisieren müssen

-
@XHansWurstX
Da wird buffer doch beschrieben, ich meinte aber den Fall, wenn eine reservierte, aber nicht initialisierte Variable gelesen wird. Klar, dass nicht 0 drin stehen wird (sofern nicht global oder Zufall), aber es geht mir ja drum ob es abstürzen würde.