How can the user set the size of the array i.e., change the value of m by n) during the run-time? Is it possible to declare arrays without knowing its size?
malloc()
void * malloc(size_t size);
Characteristics of “void * ” type (void pointer type)
void pointer type can be assigned arbitrary types
void pointer type can perform pointer operations
in order to use the void pointer type properly, casting is necessary
returns a pointer to the allocated memory, or NULL if the request fails
Example:
//** 1D Array
(int *)malloc(sizeof(int) * (_row));
//** 2D Array
// 1. allocate row array first
matA = (int**)malloc(sizeof(int*) * (_row));
// 2. Then, allocate column
for(int i = 0; i < _row; i++)
(matA)[i] = (int*)malloc(sizeof(int) * (_col));
val = 1;
int *vecC;
// Memory allocation
vecC = (int*)malloc(sizeof(vecC) * (_row));
// Initialization with a value
for (i = 0; i < _row; i++)
(vecC)[i] = val;
// Free allocated memory when program ends
free(vecC);
int **matB;
createMat(&matB,_row, _col);
initMat(matB,_row, _col,3);
printMat(matB, _row, _col);
system("pause" );
free(matA);
free(matB);
////////////////////////////////////////////////////
void createMat(int*** _mat, int _row, int _col)
{
int i;
*_mat = (int**)malloc(sizeof(int) * (_row));
for(i = 0; i < _row; i++)
(*_mat)[i] = (int*)malloc(sizeof(int) * (_col));
}
void initMat(int** _mat, int _row, int _col, int _val)
{
int i, j;
for(i = 0; i < _row; i++)
{
for(j = 0; j < _col;j++)
(_mat)[i][j] = _val;
}
}
You are passing ‘int*mat’ to the function ‘create_mat( )’ without allocating size and memory of the 2-D array. Thus, you need to pass the address of ‘int **mat’ as ‘**&mat’ and the function receives it as ‘int* _mat’ (3 pointer notation)
createMat(&matB,_row, _col);
void createMat(int*** _mat, int _row, int _col)
Notice how different ‘malloc’ syntax is used in ‘Main()’ function and in ‘create_mat()’ function. Once, the memory of 2-D is allocated then you can pass the array to a function as
initMat(matB,_row, _col,3);
void initMat(int** _mat, int _row, int _col, int _val)