I am experimenting with malloc and I am trying to create a dynamic 2D array, I know the size of the second dimension and I am allocating memory like so:
int (*arr)[SIZE] = NULL;
arr = malloc(sizeof(arr[SIZE]) * 10);
My question is, is it possible place the above code into a function, and return the address of the allocated memory, if so what should the type be?
Edit: I am aware of the other method of allocating and return a pointer to a pointer.
Thanks in advance.
For starters the argument of malloc is confusing
arr = malloc(sizeof(arr[SIZE]) * 10);
It seems you mean
arr = malloc(sizeof( *arr ) * 10);
That is you are trying to allocate dynamically an array of the type int[10][SIZE].
More precisely the record used as an argument in the call of malloc
arr = malloc(sizeof(arr[SIZE]) * 10);
is correct but very confusing. It is better not to use such a record for the sizeof operator.
The function declaration can look like
int ( *allocation( size_t n ) )[SIZE];
Or you can introduce a typedef name like
typedef int ( *Array2D )[SIZE];
and then declare the function like
Array2D allocation( size_t n );
where n corresponds to the used by you value 10. That is using the parameter you can specify any number for the array dimension apart from 10.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With