Die Präsentation wird geladen. Bitte warten

# ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.

## Präsentation zum Thema: "ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1."—  Präsentation transkript:

ESP Tutorium Studienassistent: Ewald Moitzi E-Mail: prog-tutor-ewald@iicm.tugraz.at Gruppe 1

Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe:

Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe: hallo\$%§\$&45

Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe: hallo\$%§\$&45

int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); ? Ausgabe: Finde den Fehler 2

int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); ? Ausgabe: in if after if Finde den Fehler 2

int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); ? Ausgabe: in if after if Finde den Fehler 2

void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } Ausgabe: Finde den Fehler 3 int number = 3; getNextEven(number); printf ("%d\n",number); ?

void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } Ausgabe: 3 Finde den Fehler 3 int number = 3; getNextEven(number); printf ("%d\n",number); ?

void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } Ausgabe: 3 Finde den Fehler 3 unsigned int number = 3; getNextEven(number); printf ("%d\n",number); ?

Finde den Fehler 4 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe:

Finde den Fehler 5 int array[5]; array[5] = 123; printf ("%d\n",array[5]); int array[5]; array[5] = 123; printf ("%d\n",array[5]); ? Ausgabe:

Finde den Fehler 5 int array[5]; array[5] = 123; printf ("%d\n",array[5]); int array[5]; array[5] = 123; printf ("%d\n",array[5]); ? Ausgabe: 123

Finde den Fehler 5 int array[5]; array[5] = 123; printf ("%d\n",array[5]); int array[5]; array[5] = 123; printf ("%d\n",array[5]); ? Ausgabe: 123

Finde den Fehler 6 float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); ? Ausgabe:

Finde den Fehler 6 float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); ? Ausgabe: number != 1.1

Finde den Fehler 6 float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); ? Ausgabe: number != 1.1

Zahlenrepräsentation Zahlensysteme Binär (Basis 2) Octal (Basis 8) (in C z.B. 0123) Dezimal (Basis 10) (in C z.B. 123) Hexadezimal (Basis 16) (in C z.B. 0x123) Hexadezimal 0 – 9 +

Zahlenrepräsentation 195948557: Dezimal → Hex Durch Zielbasis dividieren, Rest von rechts nach links anschreiben

Zahlenrepräsentation 0xBEEF : Hex → Dezimal Von rechts nach links: Wert x 16 mit Stelle potenzieren

Dynamischer Speicher #include void *malloc (size_t size); void free (void *base_ptr); void *realloc(void *base_ptr, size_t size);

Dynamischer Speicher - Hinweise Neuer Speicherblock ist uninitialisiert Freigeben nicht vergessen Pointer auf freigegebenen Speicher (Speichermüll!) Nach..alloc() immer auf NULL überprüfen (Speicher voll?) realloc(): tmp pointer verwenden! realloc(): vorsicht in funktionen VALGRIND VERWENDEN!!

Valgrind Bei gcc mit –g kompilieren Aufruf Valgrind Tutorial > http://www.student.tugraz.at/weinberger/esp/valgrind/ valgrind --tool=memcheck --leak-check=yes./name

Mehrdimensionale Arrays Auch mehrdimensionale Arrays liegen sequentiell im Speicher: n.d. 0x2740 0x2744 0x2748 0x274B 0x274F 0x2743 int array[2][2]; array befindet sich an der Speicherstelle 0x2740 Zugriff auf 2. Element der 2. Dimension: array[1][1] oder: *(*(array + 1) + 1) Beide Notationen liefern den Wert an der Stelle 0x274B n.d. array[0][0] array[0][1] array[1][0] array[1][1] array

Finde den Fehler 7 int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); ? Ausgabe:

Finde den Fehler 7 int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); ? Ausgabe: Segmentation fault (möglicherweise)

Finde den Fehler 7 int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); ? Ausgabe: Segmentation fault (möglicherweise)

Finde den Fehler 8 int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); ? Ausgabe:

Finde den Fehler 8 int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); ? Ausgabe: 1

Finde den Fehler 8 int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); ? Ausgabe: 1

Finde den Fehler 9 char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } ? Ergebnis:

Finde den Fehler 9 char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } ? Ergebnis: Möglicherweise Speicherloch

Finde den Fehler 9 char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } ? Ergebnis: Möglicherweise Speicherloch

Finde den Fehler 10 char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); ? Ausgabe:

Finde den Fehler 10 char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); ? Ausgabe: Some text\$&/?=

Finde den Fehler 10 char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); ? Ausgabe: Some text\$&/?=

Ähnliche Präsentationen