¿Alguien más inteligente que yo puede explicarme por qué faltan las siguientes fallas en el segmento del código? No hay problema para asignar la memoria por referencia, pero tan pronto como trato de asignar algo o de forma gratuita por referencia, ocurre segfault.Asignación de matriz dinámica bidimensional y transferencia por referencia en C
Estoy seguro de que me falta un concepto fundamental sobre los punteros y el paso por referencia, ojalá se pueda arrojar algo de luz.
#include <stdlib.h>
#include <stdio.h>
void allocateMatrix(float ***);
void fillMatrix(float ***);
void freeMatrix(float **);
int main() {
float **matrix;
allocateMatrix(&matrix); // this function calls and returns OK
fillMatrix(&matrix); // this function will segfault
freeMatrix(matrix); // this function will segfault
exit(0);
}
void allocateMatrix(float ***m) {
int i;
m = malloc(2*sizeof(float*));
for (i = 0; i < 2; i++) {
m[i] = malloc(2*sizeof(float));
}
return;
}
void fillMatrix(float ***m) {
int i,j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
(*m)[i][j] = 1.0; // SEGFAULT
}
}
return;
}
void freeMatrix(float **m) {
int i;
for (i = 0; i < 2; i++) {
free(m[i]); // SEGFAULT
}
free(m);
return;
}
Estoy realmente un poco sorprendido de que compile. "void allocateMatrix (& m)" probablemente no esté escribiendo m como float ** como se esperaba. Además, no hay referencias en C de la misma manera que existen en C++. – Corbin
¿por qué las firmas para 'freeMatrix' etc. son diferentes en la declaración y la definición? – keety
keety, Corbin: lo siento copiar pegar no, lo solucionó – holocron