C Kleine Aufgabensammlung ... ungelöste Fragen

Status
Für weitere Antworten geschlossen.

elektro2

Cadet 4th Year
Registriert
Feb. 2014
Beiträge
67
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 :

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() { ... }
 
Langsam ist echt mal gut mit deinen Threads. Mach deine Hausaufgaben doch bitte selbst.
 
Das sind keine Hausaufgaben. Diese Fragen sind für mich persönlich ungeklärt. Ich habe nächste Woche die Klausur und möchte gut vorbereitet sein.
 
Wenn ich nicht weiter weiss probiere ich es einfach aus oder frage meine Dozenten bzw. Studienmitstreiter...:D
 
Hey.. Danke für deine Mühe

Also bei Nr. 6 gibt mit der COmpiler an, dass es private gar nicht gibt und, dass static eh nicht bei einer funktion benutzt werden kann..

Deshalb finde ich die Aufgabenstellung komisch :)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben