What i need is a function that modifies given pointer to 2d matrix like this:
void intMatrixAll(int row, int col, int **matrix);
Now, a function should allocate memory and the matrix could be used. Rows and cols are given at run-time.
#include <stdio.h>
#include <stdlib.h>
#define PRINTINT(X) printf("%d\n", X);
void intMatrixAll(int row, int col, int **matrix);
int main(void) {
int testArrRow = 4;
int testArrCol = 6;
int **testMatrix = NULL;
intMatrixAll(testArrRow, testArrCol, testMatrix);
testMatrix[2][2] = 112; //sementation fault here :(
PRINTINT(testMatrix[2][2]);
system("PAUSE");
return 0;
}
void intMatrixAll(int row, int col, int **matrix) {
printf("intMatrixAll\n");
//allocate pointers:
matrix = malloc(row * sizeof(int *));
if(matrix == NULL) printf("Failed to allocate memmory.\n");
for(int i=0; i<row; i++) {
//allocate space for cols:
matrix[i] = malloc(col * sizeof(int));
if(matrix[i] == NULL) {
printf("Failed to allocate memmory for arr[%d].\n", i);
exit(0);
}
}
}
Why am i getting error?
Because modifying matrix inside intMatrixAll() does not modify testMatrix in main(). If you want to be able to modify main’s variable, you need to pass a pointer to it. So you need to change intMatrixAll to:
Inside intMatrixAll, you’ll now need to change
matrixto*matrix(and for when you are indexing it, you’ll want(*matrix)[...].Finally, you need to change your call to intMatrixAll to:
The reason why is that C only supports pass-by-value and pass-by-value does not support the called function changing the value of a variable in the caller.
In order to modify the value of a variable in the caller, you need to pass a pointer to the variable and then have the called function dereference it.