Как уже говорили другие, вам нужно взять указатель на указатель на указатель в вашей функции инициализации.Вот как меняется функция initialize
:
void initialize(double ***A, int r, int c)
{
*A = (double **)malloc(sizeof(double *)*r);
for(int i = 0; i< r; i++) {
(*A)[i] = (double *)malloc(sizeof(double) *c);
for(int j = 0; j < c; j++) {
(*A)[i][j] = 0.0;
}
}
}
И main
будет:
int main()
{
double **A;
initialize(&A, 10, 10);
}
Кроме того, код, который вы опубликовали, не должен вызывать ошибки сегментации при передачеуказатель A
. Ошибка сегментации наиболее вероятна, когда вы вернетесь из функции и попытаетесь получить доступ к A
, поскольку A
в main
не будет инициализирован.Только его копия инициализируется так, как вы это делаете, и эта копия является локальной для функции initialize
, поэтому она теряется при возврате.