Hallo liebes Forum.
Ich habe ja in der letzen Zeit schon viele Fragen gestellt und wollte zur Klausurvorbereitung noch ein paar Aufgaben posten,
bei denen ich noch nicht auf die Lösung gekommen bin .
Wer will, kann sich gerne bei der Lösung der Aufgaben beteiligen
Danke im Voraus
NR1 :
Was stimmt mit dem obigen Code-Fragment nicht ?
1.Die dritte Zeile bewirkt ein Überschreiben aller Speicherzellen von ptr2.
2.
Es entsteht ein Speicherleckt, da das Ergebnis von malloc nicht mehr bekannt ist.
3.
Das Programm stu ̈rzt ab.
4.
Syntaxfehler. malloc braucht mindestens zwei Parameter.
5.
Es wurde zu wenig Speicher fu ̈r die Kopie der Zeichenkette angefordert.
NR2:
Im obigen Code-Fragment wurde Speicher fu ̈r eine Instanz der Struktur kunde angefordert und die Adresse im Zeiger ptr gespeichert. Wie vergro ̈ßert man Speicher, so daß danach ptr auf zusammenha ̈ngenden Speicher fu ̈r insgesamt 10 Elemente zeigt ?
NR3:
Gegeben ist folgende Funktion zur Freigabe der Elemente einer verketteten Liste.
Welches Code-Fragment gehört in den Schleifenkern und sorgt für eine korrekte Listenfreigabe ?
NR4:
Die folgende C-Funktion free list wurde implementiert, um den Speicher aller Knoten in einer einfach verketteten Liste mittels free freizugeben:
Welche Aussagen u ̈ber die Wirkung bzw. die Eigenschaften der Funktion treffen zu und wel- che nicht ?
1.
Das Programm ist korrekt und gibt die vollsta ̈ndige Liste frei.
2.
Das Programm kann abstürzen, da auf list->next nach der Freigabe von list zugegriffen wird.
3.
Das Programm ist syntaktisch inkrorrekt. Die Anweisung list = list->next muß stattdessen list = list.next lauten.
4.
Das Programm ist syntaktisch inkrorrekt. Bei der Funktion free fehlt der Parameter, der die Gro ̈ße angibt.
5.
Die Schleife terminiert nicht.
NR5:
Wenn eine Variable wie obigen Fall so definiert worden ist, daß sie innerhalb einer C-Datei global sichtbar ist, kann man dann auf sie von einer anderen C-Daei auch auf sie zugreifen ?
1.
Ja, allerdings nur wenn man in der anderen Datei ein register davor schreibt.
2.
Nein, dann ha ̈tte die Variable vorher als static deklariert wer- den mu ̈ssen.
3.
Nein, dann ha ̈tte die Variable vorher mit dem Zusatz global deklariert werden mu ̈ssen.
4.
Ja, allerdings nur wenn man in der anderen Datei ein publish davor schreibt.
5.
Ja, wenn in der anderen Datei die Variable mit dem Zusatz register bekannt gemacht wird.
NR6:
Welche der folgenden Funktionen kann nicht aus einer anderen C-Datei heraus aufgerufen werden ?
1.
void function() { ... }

2.
extern void function() { ... }

3.
const void function() { ... }

4.
private void function() { ... }

5.
static void function() { ... }
Ich habe ja in der letzen Zeit schon viele Fragen gestellt und wollte zur Klausurvorbereitung noch ein paar Aufgaben posten,
bei denen ich noch nicht auf die Lösung gekommen bin .
Wer will, kann sich gerne bei der Lösung der Aufgaben beteiligen
Danke im Voraus
NR1 :
Code:
char ptr1[] = "Hello World";
char *ptr2 = malloc(5);
ptr2 = ptr1;
Was stimmt mit dem obigen Code-Fragment nicht ?
1.Die dritte Zeile bewirkt ein Überschreiben aller Speicherzellen von ptr2.
2.
Es entsteht ein Speicherleckt, da das Ergebnis von malloc nicht mehr bekannt ist.
3.
Das Programm stu ̈rzt ab.
4.
Syntaxfehler. malloc braucht mindestens zwei Parameter.
5.
Es wurde zu wenig Speicher fu ̈r die Kopie der Zeichenkette angefordert.
NR2:
Code:
struct kunde *ptr = malloc(sizeof(struct kunde));
Im obigen Code-Fragment wurde Speicher fu ̈r eine Instanz der Struktur kunde angefordert und die Adresse im Zeiger ptr gespeichert. Wie vergro ̈ßert man Speicher, so daß danach ptr auf zusammenha ̈ngenden Speicher fu ̈r insgesamt 10 Elemente zeigt ?
Code:
1. ptr = realloc(ptr, 10 * sizeof(struct customer));
2. realloc(ptr, 9 * sizeof(struct customer));
3. ptr += malloc(9 * sizeof(struct customer));
4. ptr = realloc(ptr, 9 * sizeof(struct customer));
5. realloc(ptr, 10 * sizeof(struct customer));
NR3:
Gegeben ist folgende Funktion zur Freigabe der Elemente einer verketteten Liste.
Code:
void freeList (struct node *n)
{
while( n ) {
/* was fehlt hier ? */
} }
Welches Code-Fragment gehört in den Schleifenkern und sorgt für eine korrekte Listenfreigabe ?
Code:
1.
n = n->next; free(n);

2.
struct node m = n; n = n->next; free( m );

3.
struct node m = n; free(n); n = m->next;

4.
free(n); n = n->next;

5.
struct node m = n->next; free(n); n = m
NR4:
Die folgende C-Funktion free list wurde implementiert, um den Speicher aller Knoten in einer einfach verketteten Liste mittels free freizugeben:
Code:
struct node {
struct node *next;
...
};
void free_list (struct node *list) {
if (list == NULL)
return;
for (; list; list = list->next)
free(list);
}
Welche Aussagen u ̈ber die Wirkung bzw. die Eigenschaften der Funktion treffen zu und wel- che nicht ?
1.
Das Programm ist korrekt und gibt die vollsta ̈ndige Liste frei.
2.
Das Programm kann abstürzen, da auf list->next nach der Freigabe von list zugegriffen wird.
3.
Das Programm ist syntaktisch inkrorrekt. Die Anweisung list = list->next muß stattdessen list = list.next lauten.
4.
Das Programm ist syntaktisch inkrorrekt. Bei der Funktion free fehlt der Parameter, der die Gro ̈ße angibt.
5.
Die Schleife terminiert nicht.
NR5:
Code:
int var;
Wenn eine Variable wie obigen Fall so definiert worden ist, daß sie innerhalb einer C-Datei global sichtbar ist, kann man dann auf sie von einer anderen C-Daei auch auf sie zugreifen ?
1.
Ja, allerdings nur wenn man in der anderen Datei ein register davor schreibt.
2.
Nein, dann ha ̈tte die Variable vorher als static deklariert wer- den mu ̈ssen.
3.
Nein, dann ha ̈tte die Variable vorher mit dem Zusatz global deklariert werden mu ̈ssen.
4.
Ja, allerdings nur wenn man in der anderen Datei ein publish davor schreibt.
5.
Ja, wenn in der anderen Datei die Variable mit dem Zusatz register bekannt gemacht wird.
NR6:
Welche der folgenden Funktionen kann nicht aus einer anderen C-Datei heraus aufgerufen werden ?
1.
void function() { ... }

2.
extern void function() { ... }

3.
const void function() { ... }

4.
private void function() { ... }

5.
static void function() { ... }