| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include "../memcheck.h" |
| |
| /* Program demonstrating copying of metadata in memcheck. */ |
| |
| int main ( void ) |
| { |
| int* a = malloc(10 * sizeof(int)); |
| int* b = malloc(10 * sizeof(int)); |
| int* v = malloc(10 * sizeof(int)); |
| int i, sum, res; |
| |
| for (i = 0; i < 10; i++) { |
| if (i != 5) |
| a[i] = i; |
| } |
| |
| /* a[0 .. 4] and [6 .. 9] are defined, [5] is undefined. */ |
| for (i = 0; i < 10; i++) |
| b[i] = 0; |
| |
| /* b[0 .. 9] is defined. */ |
| |
| /* Get metadata for a and put it in v. */ |
| res = VALGRIND_GET_VBITS(a, v, 10*sizeof(int) ); |
| printf("result of GET is %d (1 for success)\n", res); |
| |
| for (i = 0; i < 10; i++) |
| printf("%d 0x%08x\n", i, v[i]); |
| |
| /* and copy to b. */ |
| res = VALGRIND_SET_VBITS(b, v, 10*sizeof(int) ); |
| printf("result of SET is %d (1 for success)\n", res); |
| |
| /* Now we should have that b[5] is undefined since a[5] is |
| undefined. */ |
| sum = 100; |
| for (i = 0; i < 10; i++) |
| sum += b[i]; |
| |
| /* V should yelp at this point, that sum is undefined. */ |
| if (sum == 0) |
| printf("sum == 0\n"); |
| else |
| printf("sum != 0\n"); |
| |
| return 0; |
| } |