Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.

Ähnliche Präsentationen


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

1 ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1

2 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:

3 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

4 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

5 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

6 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

7 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

8 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); ?

9 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); ?

10 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); ?

11 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:

12 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:

13 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

14 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

15 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:

16 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

17 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

18 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 +

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

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

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

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

23 Valgrind Bei gcc mit –g kompilieren Aufruf Valgrind Tutorial > valgrind --tool=memcheck --leak-check=yes./name

24 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

25 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:

26 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)

27 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)

28 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:

32 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

33 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

34 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:

35 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$&/?=

36 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$&/?=


Herunterladen ppt "ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1."

Ähnliche Präsentationen


Google-Anzeigen