Я пытаюсь выделить память двойного указателя, объявленного в функции main
:
int main () {
float **a, **b, **c;
inicializarMatriz (&a, &b, &c);
}
Внутри функции inicializarMatriz
следует выделить матрицу (двойной указатель).
void inicializarMatriz(float ***a, float ***b, float ***c) {
// Reservar espacio de memoria para la matriz a
**a = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
a[i] = (float *) malloc ( N * sizeof(float) );
}
if ( a == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
}
// Reservar espacio de memoria para la matriz b
**b = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
b[i] = (float *) malloc ( N * sizeof(float) );
}
if ( b == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
}
// Reservar espacio de memoria para la matriz c
**c = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
c[i] = (float *) malloc ( N * sizeof(float) );
}
if ( c == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
}
}
У меня такое предупреждение: [Warning] assignment from incompatible pointer type
и программа вылетает. Любая идея о том, что не так?
**a = (float **) malloc ( N * sizeof(float *) );
должно быть*a = (float **) malloc ( N * sizeof(float *) );
(то же самое дляb
иc
), и не использовать malloc - person David Ranieri   schedule 04.10.2018a
относится к типуfloat ***
.*a
относится к типуfloat **
.**a
относится к типуfloat *
.***a
относится к типуfloat
. Я надеюсь, вы видите образец. - person Some programmer dude   schedule 04.10.2018a[i] = (float *) malloc ( N * sizeof(float) );
. Это должно быть:*a[i] = (float *) malloc ( N * sizeof(float) );
? - person JuMoGar   schedule 04.10.2018*a[i]
равно*(a[i])
, а не(*a)[i]
, что вам нужно. - person Some programmer dude   schedule 04.10.2018