Skip to content
Snippets Groups Projects
Commit 749fcab1 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Notizen und Beispiele 28.1.2021

parent c0ae7b1c
No related branches found
No related tags found
No related merge requests found
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
No preview for this file type
......@@ -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\\
......
#include <stdio.h>
int main (void)
{
char *hello = "Hello";
hello[1] = 'a';
printf ("%s\n", hello);
return 0;
}
#include <stdio.h>
int main (void)
{
char hello[] = "Hello";
hello[1] = 'a';
printf ("%s\n", hello);
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment