malloc matrix which points to malloc arrays(C) -


edit: should not use [].

i have defined integer n value 5 , *malloc.

#define n  void* malloc (size_t size); 

...

int *p_mat=(int*)malloc(sizeof(int*) * n); 

this matrix.

now need arrays.

int p_arr1=(int)malloc(sizeof(int) * 4);  int p_arr2=(int)malloc(sizeof(int) * 3);  int p_arr3=(int)malloc(sizeof(int) * 1);  int p_arr4=(int)malloc(sizeof(int) * 2);  int p_arr5=(int)malloc(sizeof(int) * 5); 

so have 5 arrays in different sizes. how make each pointer of matrix point first cell in array?

and question, how send these variables function, mean - parameters in function key?

an array of n pointers arrays-of-integers of different sizes.... (note don't cast malloc return value in c - can hide errors - see do cast result of malloc?).

int = 0; int *p[n]; size_t sizes[] = { 4, 3, ..., 5 }; // n sizes  for(; < n; ++i) {     p[i] = malloc(sizeof(int) * sizes[i]); } 

now p array of pointers-to-int. p[n] therefore nth pointer-to-int in array.

int *p[n] in memory:

int *p[n] +-----+ |     | <------- each element of array pointer-to-an-integer |     | +-----+ |     | |     | +-----+ . . . +-----+ |     | |     | +-----+ 

when p[n] = malloc(sizeof(int) * sizes[i]), saying pointer p[n] (remember each element of array p pointer), points block of memory size of sizes[i] integers. like...

+-----+                                            +------+------+ ... +------+ |p[n] |-------- array element pointer ---> | int1 | int2 |     | intm | |     |                                            |      |      |     |      | +-----+                                            +------+------+ ... +------+ . . . +-----+ |     | |     | +-----+ 

so when write p[n] accessing pointer array of ints malloc()ed...

later on in code must remember free() memory allocated :)

for(; < n; ++i) {     free(p[i]); } 

hope helps...

edit: didn't read last bit of question wilsonmichaelpatrick has answered it...

edit: note, btw, i'm not checking malloc() return null , handling possible error example...

if not want declare int *p[n]; on stack , prefer heap, try following...

int = 0; size_t sizes[] = { 4, 3, ..., 5 }; // n sizes int **p = malloc(sizeof(int *) * n); for(; < n; ++i) {     p[i] = malloc( sizeof(int) * sizes[i]); }  ... ...  for(; < n; ++i) {     free(p[i]); }  free(p); 

edit: use #include <stdlib.h> definitions of free() , malloc()


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -