Frage zur Altklausur MC Juli, 2015, 1.2) a

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Frage zur Altklausur MC Juli, 2015, 1.2) a
Hi,

Gegeben sei folgendes Programmfragment:

static char a[] = "20150721";
int foo(int x) {
 static int b = 0;
 int c = 0;
 int (*d)(const int *) = foo;
 int *e = malloc(800);
 a[0] = ’3’;
 ++x;
 ++b;
 ++c;
 ...
}

Welche der folgenden Aussagen zu den Variablen im Programm sind richtig?
❍ Die Funktion foo kann von anderen Modulen aus aufgerufen werden.
❍ b hat nach mehrfacher Ausführung der Funktion foo immer den Wert 1, da die
Variable jedes Mal neu mit 0 initialisiert wird.
❍ c hat nach mehrfacher Ausführung der Funktion foo immer den Wert 1, da die
Variable jedes Mal neu mit 0 initialisiert wird.
❍ Das Ergebnis des Aufrufs der Funktion foo wird in d gespeichert.
❍ Die Zuweisung a[0] = ’3’; in Zeile 7 des Programmfragments verändert die
Zeichenkette a und läuft ohne Fehler (z. B. Segmentation fault) durch.
❍ e liegt auf dem Stack.
❍ e zeigt auf ein Array, in dem Platz für 800 Ganzzahlen vom Typ int ist.
❍ Die Anweisung ++x ändert den Wert von x und beeinflusst somit den Wert einer
Variablen im Aufrufer.

Ich wollte fragen, wieso diese Antwort falsch ist?

“e zeigt auf ein Array, in dem Platz für 800 Ganzzahlen vom Typ int ist.”

  • Weil ein Array ist für mich eine Folge von Werten eines gleichen Datentyps, und hier ist es eine Folge von 800, aber liegt es an dieser Formulierung?
    “in dem Platz für 800 Ganzzahlen vom Typ int ist”, weil man kann ja auch “mehr” speichern, was aber Überlappungen oder sogar Segmentation Fault erzeugen würde?

Danke


Der malloc-Aufruf allokiert 800 Bytes, [m]int[/m] ist laut C-Standard mindestens 2 Byte gross. Es ist also kein Platz fuer 800 Ganzzahlen vom Typ int.


Danke :smiley:

Auf sowas zu kommen xD