Рассмотрим следующие коды:
#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;
}
Приведенный выше код вызовет ошибку выделения памяти и завершится сбоем.
Но приведенный ниже код будет работать правильно, вопрос: ПОЧЕМУ?
#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;
}
Я не могу понять, почему происходит сбой первого кода, поскольку я просто передаю указатель-указатель m (переменная, которая содержит в памяти первый адрес памяти матрицы) в качестве аргумента.Я не вижу разницы между кодами (на практике).Буду признателен за любое четкое объяснение.
Спасибо, Рафаэль Андреатта