[prev] [index] [next]

Memory Leaks (cont)

Example function without memory leak:

int median(int v[], int n) {
        int i, j, min, tmp, med, *sorted;

        sorted = (int *)malloc(n*sizeof(int));
        assert(sorted != NULL);

	for (i = 0; i < n; i++) { sorted[i] = v[i]; }

        for (i = 0; i < n; i++) {   // a simple sorting algorithm
                min = i;
                for (j = i+1; j < n; j++) {
                        if (sorted[j] < sorted[min]) { min = j; }
                }
		tmp = sorted[i];
                sorted[i] = sorted[min];
		sorted[min] = tmp;
        }
	med = sorted[n/2];
	free(sorted);
        return med;   // would return sorted[n/2]; work?
}

The array referenced by sorted is cleaned up before function returns.