Crear matriz puntero de dimensi贸n variable

chuvaca007
22 de Julio del 2008
Buenas tarde, foreros.
Necesito una ayuda de Uds.
Necesito hacer un programa en C, que sirva para almacenar una matriz puntero de dimensi贸n variable, es decir, que la dimensi贸n de la matriz dependa de un valor de entrada del usuario. No s茅 si es posible hacer eso.

Yo comenc茅 mi c贸digo de la siguiente forma:

/*comienzo.c*/
#include <stdio.h>
#include <conio.h>
#include <new.h>

void solicitar(int tam2, float *matriz2[tam2][tam2])
{
int a,b;
for(a=0;a<tam2;a++)
{
for(b=0;b<tam2;b++)
{
printf(\"Introduzca el valor del t茅rmino de la fila %d y la columna %d: \",a+1,b+1);
scanf(\"%f\",&*matriz2[a][b]);
}
}
}

void main()
{
int tam,g,h;
printf(\"Coloca la dimensi贸n de la matriz a la cual deseas invertir: \");
scanf(\"%d\",&tam);
float *matriz[tam][tam];
solicitar(tam,*matriz[0:tam-1][0:tam-1]);
clrscr();
printf(\"La matriz introducida es: \\n\");
for(g=0;g<tam;g++)
{
for(h=0;h<tam;h++)
{
printf(\"%f \",*matriz[g][h]);
}
printf(\"\\n\");
}
getch();
}


Pero siempre me da errores porque supuestamente las dimensiones de la matriz deben ser constantes para el programa y no pueden ser definida por el usuario.
Si algui茅n me puede decir como hacerle entender al compilador que la dimensi贸n de la matriz la determinar谩 el usuario se lo agradecer铆a.
Saludos

hadrien
22 de Julio del 2008
Puedes hacer que la matriz sea un doble puntero:
double **a;

Pides al usuario el tama帽o de la matriz: int n, m;
Y guardas memoria gracias a la funci贸n calloc:
a = (double ** ) calloc(m, sizeof(double *));
if(a == NULL )
{
printf("nERROR: No hay suficiente.n");
exit(1);
}

for( i=0; i<n; i++ )
{
a[i] = (double *) calloc(n, sizeof(double));
if( a[i] == NULL)
{
printf("nERROR: No hay suficiente memoria.n");
exit(1);
}
}

Luego ya puedes pedir los valores recorriendo la matriz.