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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#include <stdio.h>
#include <stdlib.h>
#include "../memcheck.h"
#include "leak.h"
char *b10;
char *b21;
char *b32_33[2];
static void breakme() {};
void f(void)
{
int i;
b10 = malloc (10);
fprintf(stderr, "expecting details 10 bytes reachable\n"); fflush(stderr); breakme();
VALGRIND_DO_LEAK_CHECK;
fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
VALGRIND_DO_ADDED_LEAK_CHECK;
b10--; // lose b10
b21 = malloc (21);
fprintf(stderr, "expecting details +10 bytes lost, +21 bytes reachable\n"); fflush(stderr); breakme();
VALGRIND_DO_ADDED_LEAK_CHECK;
for (i = 0; i < 2; i ++)
b32_33[i] = malloc (32+i);
fprintf(stderr, "expecting details +65 bytes reachable\n"); fflush(stderr); breakme();
VALGRIND_DO_ADDED_LEAK_CHECK;
fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
VALGRIND_DO_ADDED_LEAK_CHECK;
b10++;
fprintf(stderr, "expecting details +10 bytes reachable\n"); fflush(stderr); breakme();
VALGRIND_DO_ADDED_LEAK_CHECK;
b10--;
fprintf(stderr, "expecting details -10 bytes reachable, +10 bytes lost\n"); fflush(stderr); breakme();
VALGRIND_DO_CHANGED_LEAK_CHECK;
b10++;
fprintf(stderr, "expecting details -10 bytes lost, +10 bytes reachable\n"); fflush(stderr); breakme();
VALGRIND_DO_CHANGED_LEAK_CHECK;
b32_33[0]--;
fprintf(stderr, "expecting details 32 (+32) bytes lost, 33 (-32) bytes reachable\n"); fflush(stderr); breakme();
VALGRIND_DO_CHANGED_LEAK_CHECK;
fprintf(stderr, "finished\n");
}
int main(void)
{
DECLARE_LEAK_COUNTERS;
GET_INITIAL_LEAK_COUNTS;
f(); // see leak-cases.c
GET_FINAL_LEAK_COUNTS;
PRINT_LEAK_COUNTS(stderr);
return 0;
}
|