mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 00:16:11 +00:00
59 lines
1.2 KiB
C
59 lines
1.2 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include "../memcheck.h"
|
|
#include "leak.h"
|
|
|
|
int main(void)
|
|
{
|
|
int x;
|
|
int y = 0;
|
|
int* reachable __attribute__((unused));
|
|
int* dubious;
|
|
int* leaked __attribute__((unused));
|
|
DECLARE_LEAK_COUNTERS;
|
|
|
|
/* we require these longs to have same size as a machine word */
|
|
assert(sizeof(long) == sizeof(void*));
|
|
|
|
/* Error counting */
|
|
fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
|
|
|
|
if (x == 0) {
|
|
y++;
|
|
} else {
|
|
y--;
|
|
}
|
|
|
|
fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
|
|
|
|
// Get a baseline, after start-up and also after printf (because Darwin
|
|
// printf allocates memory the first time it's called!)
|
|
GET_INITIAL_LEAK_COUNTS;
|
|
|
|
fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
|
|
|
|
/* Leak checking */
|
|
GET_FINAL_LEAK_COUNTS;
|
|
PRINT_LEAK_COUNTS(stderr);
|
|
fprintf(stderr, "\n");
|
|
|
|
fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
|
|
|
|
leaked = malloc(77);
|
|
leaked = 0;
|
|
|
|
dubious = malloc(88);
|
|
dubious += 10;
|
|
|
|
reachable = malloc(99);
|
|
|
|
GET_FINAL_LEAK_COUNTS;
|
|
PRINT_LEAK_COUNTS(stderr);
|
|
fprintf(stderr, "\n");
|
|
|
|
fprintf(stderr, "errors: %d\n", VALGRIND_COUNT_ERRORS);
|
|
|
|
return 0;
|
|
}
|