1 
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "../memcheck.h"
5 
6 /* Program demonstrating copying of metadata in memcheck. */
7 
main(void)8 int main ( void )
9 {
10   int* a = malloc(10 * sizeof(int));
11   int* b = malloc(10 * sizeof(int));
12   int* v = malloc(10 * sizeof(int));
13   int i, sum, res;
14 
15   for (i = 0; i < 10; i++) {
16      if (i != 5)
17         a[i] = i;
18   }
19 
20   /* a[0 .. 4] and [6 .. 9] are defined, [5] is undefined. */
21   for (i = 0; i < 10; i++)
22      b[i] = 0;
23 
24   /* b[0 .. 9] is defined. */
25 
26   /* Get metadata for a and put it in v. */
27   res = VALGRIND_GET_VBITS(a, v, 10*sizeof(int) );
28   printf("result of GET is %d (1 for success)\n", res);
29 
30   for (i = 0; i < 10; i++)
31      printf("%d 0x%08x\n", i, v[i]);
32 
33   /* and copy to b. */
34   res = VALGRIND_SET_VBITS(b, v, 10*sizeof(int) );
35   printf("result of SET is %d (1 for success)\n", res);
36 
37   /* Now we should have that b[5] is undefined since a[5] is
38      undefined. */
39   sum = 100;
40   for (i = 0; i < 10; i++)
41      sum += b[i];
42 
43   /* V should yelp at this point, that sum is undefined. */
44   if (sum == 0)
45     printf("sum == 0\n");
46   else
47     printf("sum != 0\n");
48 
49   return 0;
50 }
51