1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
# include <stdio.h>
# include <strings.h>
# include <stdlib.h>
# include <assert.h>
typedef struct
{
int x;
char *name;
} record;
record copyrecord (record x)
{
record copy = x;
return copy; /* 1. Released storage x.name reachable from parameter at ... */
}
record copyrecord2 (record x)
{
record copy;
copy = x;
return copy; /* 2. Released storage x.name reachable from parameter at ... */
}
record copyrecord3 (record x)
{
return x; /* 3. Released storage x.name reachable from parameter at ... */
}
int main ()
{
record r;
record rc;
r.x = 3;
r.name = (char *) malloc (sizeof (char) * 100);
assert (r.name != NULL);
strcpy (r.name, "yo");
rc = r;
printf ("rc: %s", rc.name);
return r.x; /* 4. Only storage rc.name (type char *) derived from variable ... */
}
|