[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Warum kein Speicherzugriffsfehler



Am Donnerstag 14 Februar 2008 schrieb Markus Schulz:
> Am Donnerstag, 14. Februar 2008 schrieb Martin Steigerwald:
> > Hallo!
> >
> > Ich weiß, es ist off topic, aber ich bin jetzt grad so neugierig,
> > dass ich trotzdem mal fragen möchte. Ausgehend von der Diskussion zum
> > Speicherverbrauch von tab-basierten Konsolen bin ich bei einem
> > Galileobuch gelandet, wo auch ein Absatz zum virtuellen Speicher drin
> > ist und Speicher anfordern drin ist[1].
> >
> > Da ist nettes Beispiel zum Speicher anfordern drin und auch ne
> > Erklärung, wie es zu einem Speicherzugriffsfehler kommen kann.
> >
> > Nun wollte ich das mal ausprobieren:
> >
> > martin@shambala> cat zugriffsfehler.c
> > #include <stdlib.h>
> > #include <stdio.h>
> >
> > int main()
> > {
> >   char* puffer;                // Variable deklarieren
> >   puffer = malloc(4096);       // 4 KB = 4096 Bytes
> >                                // anfordern
> >
> >   // Nun kann der Speicherbereich benutzt werden
> >
> >   printf("4 KB Addressraum belegt ab: %ld\n", puffer);
> >
> >   free(puffer);                // Speicherbereich
> >                                // wieder freigeben
> >
> >   // Jeder Zugriff, der nach dem Freigeben auf den
> >   // Speicherbereich der Variable 'puffer'
> >   // erfolgt, führt zu einem Speicherzugriffsfehler
> >
> >   printf("Zeiger auf den Speicher nach dem free(): %ld\n", puffer);
> >
> >   printf("Und Speicherzugriffsfehler ;-)\n");
> >
> >   int i;
> >
> >   for (i==0; i<1; i++) {
>
>           ^^
> Das ist ein Vergleich und keine Initialisierung. D.h. i hat einen
> zufälligen Wert. Deshalb stürzt dein Programm ab, da i mit extrem hoher
> Wahrscheinlichkeit als Index auf eine nicht von deinem Programm
> allokierte Page zeigt.

Hallo Markus und Reinhold!

Vielen Dank für eure Antworten!

Autsch... Danke. OK, es ist schon eine Weile her, dass ich das letzte Mal 
in C programmiert habe ;-)

Dann spiel ich am Wochenende nochmal mit einer korrekten Schleife rum. Ich 
find aber schon krass, dass ich in eigentlich freigegebene 
Speicherbereiche reinschreiben kann. Mir wäre es da ehrlich gesagt 
lieber, wenn der Kernel beim ersten Zugriff reagiere und damit 
Programmierer anleitet, korrekten Code zu schreiben ;).

Ciao,
-- 
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: