[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!

Das ist natürlich auch von daher interessant, als ich immer davon ausging, 
dass die Deklaration der Variable aka "int i;" bereits den 
Speicherbereich für diese alloziert.

Nun, wieder was dazugelernt.

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: