Hi there

This is not an urgent question, I'm just curious to know if there is an answer. I've done a search but nothing has come up - I suspect this is because I don't know how to pose the question succinctly.

I use this function to dynamically allocate 2D arrays of type int:

and this one to do the same for floats:Code:int **get_space_i(int m, int n) { int i, *p, **a; p = malloc(m * n * sizeof(int)); a = malloc(m * sizeof(int *)); for(i = 0; i < m; i++) a[i] = p + (i * n); return a; }

and the same for doubles, structs etc. This is how it's used:Code:float **get_space_f(int m, int n) { int i; float *p, **a; p = malloc(m * n * sizeof(float)); a = malloc(m * sizeof(float *)); for(i = 0; i < m; i++) a[i] = p + (i * n); return a; }

So I was wondering if there was a way that I could make one generic function where a third argument specifies the type? I tried something like this:Code:int *X, rows, cols; X = get_space_i(rows,cols);

but it segfaults. Any ideas how this might work?Code:void **get_space(int m, int n, size_t size) { int i; void *p, **a; p = malloc(m * n * size); a = malloc(m * size); for(i = 0; i < m; i++) { a[i] = p + (i*n); } return a; } int **a; float **b; a = (int **)get_space(m,n,sizeof(int)); b = (float **)get_space(m,n,sizeof(float));

Thanks in advance

Gib