diff --git a/20210128/dynmem-1.c b/20210128/dynmem-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..129ae368b75355aecac8fca803af968e196bf720
--- /dev/null
+++ b/20210128/dynmem-1.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  char **name = malloc (3 * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < 3; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-10.c b/20210128/dynmem-10.c
new file mode 100644
index 0000000000000000000000000000000000000000..277cf78b0436195f2935d12e38d927024bfa80b7
--- /dev/null
+++ b/20210128/dynmem-10.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  name = new_name;
+  free (new_name);
+  name[N - 1] = "Dieter";
+
+  N++;
+  new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  name = new_name;
+  free (new_name);
+  name[N - 1] = "Emma";
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-11.c b/20210128/dynmem-11.c
new file mode 100644
index 0000000000000000000000000000000000000000..6ec1aeb467cef507991f32afa47d47478a8346f6
--- /dev/null
+++ b/20210128/dynmem-11.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  free (name);
+  name = new_name;
+  name[N - 1] = "Dieter";
+
+  N++;
+  new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  free (name);
+  name = new_name;
+  name[N - 1] = "Emma";
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-12.c b/20210128/dynmem-12.c
new file mode 100644
index 0000000000000000000000000000000000000000..646fab6f8a4f1266715b4307b9dc7db4b04dd75d
--- /dev/null
+++ b/20210128/dynmem-12.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    {
+      new_name[i] = name[i];
+      free (name[i]);
+    }
+  free (name);
+  name = new_name;
+  name[N - 1] = "Dieter";
+
+  N++;
+  new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    {
+      new_name[i] = name[i];
+      free (name[i]);
+    }
+  free (name);
+  name = new_name;
+  name[N - 1] = "Emma";
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-13.c b/20210128/dynmem-13.c
new file mode 100644
index 0000000000000000000000000000000000000000..05edde0ad90c61c4b297ba400352df62f326f1de
--- /dev/null
+++ b/20210128/dynmem-13.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int N = 3;
+char **name = NULL;
+
+void insert_string (char *s)
+{
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  free (name);
+  name = new_name;
+  name[N - 1] = s;
+}
+
+int main (void)
+{
+  name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  insert_string ("Dieter");
+  insert_string ("Emma");
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-14.c b/20210128/dynmem-14.c
new file mode 100644
index 0000000000000000000000000000000000000000..f337059fba37de6f43964354863d04e7123284d0
--- /dev/null
+++ b/20210128/dynmem-14.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int N = 3;
+char **name = NULL;
+
+void insert_string (char *s)
+{
+  N++;
+  name = realloc (name, N * sizeof (char *));
+  name[N - 1] = s;
+}
+
+int main (void)
+{
+  name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  insert_string ("Dieter");
+  insert_string ("Emma");
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-2.c b/20210128/dynmem-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..e002b3326b70b6fd2b2fb76e033c0b0b13abfb84
--- /dev/null
+++ b/20210128/dynmem-2.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  char **name = malloc (3 * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < 3; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  name[3] = "Dieter";
+
+  printf ("\n");
+  for (int i = 0; i < 4; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-3.c b/20210128/dynmem-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..ae842579f633fcee8bae8a91047360a142786635
--- /dev/null
+++ b/20210128/dynmem-3.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;
+  name[3] = "Dieter";
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-4.c b/20210128/dynmem-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..2aecf6de2971501e4519c78a69aefe08269968e7
--- /dev/null
+++ b/20210128/dynmem-4.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  for (int i = 0; i < 10; i++)
+    {
+      N++;
+      name[3] = "Dieter";
+    }
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-5.c b/20210128/dynmem-5.c
new file mode 100644
index 0000000000000000000000000000000000000000..25dfd9363aa601db04ac7209b76fcafebdc971ef
--- /dev/null
+++ b/20210128/dynmem-5.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;                      /* Falsch! */
+  name[3] = "Dieter";
+  N++;
+  name[4] = "Emma";         /* Ausgabe führt zu Absturz! */
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-6.c b/20210128/dynmem-6.c
new file mode 100644
index 0000000000000000000000000000000000000000..be115dbf74d7c0585b7b46be3c4b8bab9ddcc0b1
--- /dev/null
+++ b/20210128/dynmem-6.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+void print_names (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  /* Speicherleck: Der Zeiger "name" verschwindet, aber die 24 Bytes,
+     auf die er zeigt, sind weiterhin belegt. */
+}
+
+int main (void)
+{
+  print_names ();
+  print_names ();
+  print_names ();
+  print_names ();
+  print_names ();
+  return 0;
+}
diff --git a/20210128/dynmem-7.c b/20210128/dynmem-7.c
new file mode 100644
index 0000000000000000000000000000000000000000..e6f4605ce35755f425af2018b51121e97f8b323d
--- /dev/null
+++ b/20210128/dynmem-7.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+void print_names (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+
+  /* Kein Speicherleck: Bevor der Zeiger "name" verschwindet,
+     geben wir die 24 Bytes, auf die er zeigt, wieder frei. */
+
+  /* Garbage Collection: Die Standard-Bibliothek der Programmiersprache
+     sorgt dafür, daß nicht mehr benötigte Speicherbereiche automatisch
+     wieder freigegeben werden. C macht das nicht. */
+}
+
+int main (void)
+{
+  print_names ();
+  print_names ();
+  print_names ();
+  print_names ();
+  print_names ();
+  return 0;
+}
diff --git a/20210128/dynmem-8.c b/20210128/dynmem-8.c
new file mode 100644
index 0000000000000000000000000000000000000000..235b7be5f8360ff3764a6453ff2716aaa5142167
--- /dev/null
+++ b/20210128/dynmem-8.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  name = new_name;
+  name[N - 1] = "Dieter";
+
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  name = new_name;
+  name[N - 1] = "Emma";
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/dynmem-9.c b/20210128/dynmem-9.c
new file mode 100644
index 0000000000000000000000000000000000000000..ff863c1e4324ae44d1528b5aff13e9a9722fe4a7
--- /dev/null
+++ b/20210128/dynmem-9.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  int N = 3;
+  char **name = malloc (N * sizeof (char *));
+  name[0] = "Anna";
+  name[1] = "Berthold";
+  name[2] = "Caesar";
+
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  N++;
+  char **new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  name = new_name;
+  name[N - 1] = "Dieter";
+
+  N++;
+  new_name = malloc (N * sizeof (char *));
+  for (int i = 0; i < N - 1; i++)
+    new_name[i] = name[i];
+  name = new_name;
+  name[N - 1] = "Emma";
+
+  printf ("\n");
+  for (int i = 0; i < N; i++)
+    printf ("name[%d] = %s\n", i, name[i]);
+
+  free (name);
+  return 0;
+}
diff --git a/20210128/hp-20210128.pdf b/20210128/hp-20210128.pdf
index 06019da71ff58c18d777f5090b46f6a469ebf29e..fb8d32701478cbfa971c264403c555d07f5d54f9 100644
Binary files a/20210128/hp-20210128.pdf and b/20210128/hp-20210128.pdf differ
diff --git a/20210128/hp-20210128.tex b/20210128/hp-20210128.tex
index b5e2211a60e816e0459c7e1d5130e716f0e66cc3..87af238337904a716caf91085ab1c9a97f7afa13 100644
--- a/20210128/hp-20210128.tex
+++ b/20210128/hp-20210128.tex
@@ -824,7 +824,7 @@
 
     ...
 
-      free (name)
+      free (name);
         /* Speicherplatz freigeben */
 
   \end{lstlisting}
@@ -880,8 +880,8 @@
           \put(-2.75,-0.05){\tikz{\draw[thick](0,0.25)--(2.5,-0.05);%
                                   \draw[thick](-0.1,-0.05)--(2.5,0.3);}}
           \put(1.5,-1.1){\begin{rotate}{7}\large\bf\textarrow\
-                           kommt gleich
-%                           nächste Woche
+%                           kommt gleich
+                           nächste Woche
                          \end{rotate}}
         \end{picture}
         Zeiger, die im Objekt gespeichert sind\\
diff --git a/20210128/strings-1.c b/20210128/strings-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..a3d7c16599ce22bcdccce64b5c3abbe0cffbe08e
--- /dev/null
+++ b/20210128/strings-1.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char *hello = "Hello";
+  hello[1] = 'a';
+  printf ("%s\n", hello);
+  return 0;
+}
diff --git a/20210128/strings-2.c b/20210128/strings-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..9e0ede926f7ff007f5d3f900af45e59328825302
--- /dev/null
+++ b/20210128/strings-2.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char hello[] = "Hello";
+  hello[1] = 'a';
+  printf ("%s\n", hello);
+  return 0;
+}