Consider following codes:
#include <stdio.h>
#include <malloc.h>
void allocateMatrix(int **m, int l, int c)
{
    int i;
    m = (int**) malloc( sizeof(int*) * l );
    for(i = 0; i < l; i++)
        m[i] = (int*) malloc( sizeof(int) * c );
}
int main()
{
    int **m;
    int l = 10, c = 10;
    allocateMatrix(m, l, c);
    m[0][0] = 9;
    printf("%d", m[0][0]);
    return 0;
}
The code above will generate an memory allocation error and will crash.
But the code below will work correctly, the question is: WHY?
#include <stdio.h>
#include <malloc.h>
int** allocateMatrix(int l, int c)
{
    int i;
    int **m = (int**) malloc( sizeof(int*) * l );
    for(i = 0; i < l; i++)
        m[i] = (int*) malloc( sizeof(int) * c );
    return m;
}
int main()
{
    int **m;
    int l = 10, c = 10;
    m = allocateMatrix(l, c);
    m[0][0] = 9;
    printf("%d", m[0][0]);
    return 0;
}
I cannot see why the first code crashes, since I'm just passing the pointer-to-pointer m (the variable that holds the memory first memory address of the matrix) as an argument. I see no difference between the codes (in practice). I would appreciate any clear explanation.
Thank you, Rafael Andreatta
 
     
     
     
    