Moderne Prozessoren verwenden, was als geschützter Speicher bekannt ist. Ihr Prozess hat also ein eigenes Stück Speicher.
Das Speichermodell in C verwendet hat einen Stapel, der verwendet wird, um zu verfolgen, welche Funktion was mit welchen lokalen Variablen und Parametern aufgerufen hat. Wenn Sie 'int x;' am Anfang einer Funktion, die auf den Stapel geht.
Es gibt auch den Haufen. Der Heap ist der gesamte dynamische Speicher - alle malloc() und new(), die weitergehen.
Es gibt auch "versteckten" Speicher - Speicher von verschiedenen Bibliothek, Support, etc. Programme verwendet.
Wenn Sie dieses Argument an fputc übergeben, ist es möglich, dass Sie einen Teil des Stapels übergeben; es ist wahrscheinlicher, da es eine String-Konstante ist, dass Sie Padding oder ausführbaren Code übergeben.
Jetzt, da es sich um ein System mit geschütztem Speicher handelt, denkt Ihr Prozess, dass es Speicher ab Byte 0 hat. Es bekommt seinen eigenen flachen Speicherraum, in dem man herumspielen kann. Aber die Dinge sind nicht ganz so einfach; Es ist sehr einfach zu lesen/schreiben außerhalb, was derzeit zugeteilt ist, was auf einem modernen Betriebssystem einfach eine Speicherausnahme verursachen sollte, die Ihr Programm stoppt.
Gibt es irgendetwas GEGEN das erste zu tun? Nein. Ist es sicher zu tun, wenn Sie nur neugierig sind, was dort sein könnte? Sicher, aber es gibt bessere Möglichkeiten zu schauen. Gibt es etwa eine Million Gründe, warum du das niemals im Code tun solltest? Ja.
Zur zweiten Sache, unter der Annahme, dass diese Adressen in Ihrem Programm zugeordnet sind, können Sie irgendwelche der Daten - Programmcode, Heap-Speicher, (wahrscheinlich nicht Stapelspeicher), alles wirklich.Es gibt nichts speziell dagegen und solange Sie es gerade lesen, ist das schlimmste, was Sie bekommen, ein segfault (Speicherausnahme).
Aber es gibt niemals einen Grund, dies zu tun. Wenn Sie nur neugierig sind, können Sie mit jeder kompetenten Compiler-Suite (gcc, MSVC++ usw.) einen Core-Dump erstellen oder sogar den Heap und Stack während der Ausführung durchsuchen und untersuchen.
Es ist eine "undefinierte" Situation. Könnte funktionieren, könnte das Ende des Universums verursachen, wie wir es kennen. –
Off-Limits bedeutet Off-Limits. Es ist egal, was die Sprache ist. – Marlon
Das wäre UB, es gibt keine Erklärung dafür, das hängt von deinem Kernel ab. –