especificar dimensiones matriz

Iniciado por Fer995, 19 Noviembre 2010, 04:23 AM

0 Miembros y 1 Visitante están viendo este tema.

Fer995

hola!!

quiesiera saber como puedo pedir al usuario que introduzca un numero y a partir de el crear una matriz cuadrada de las dimensiones que le ha indicado el usuario

por ejemplo:

scanf("%d", &num);

int matriz[num][num];

esto es lo que quiero hacer... pero no se como hacerlo, pense en usar punteros.. pero no se me ocurre como hacerlo

gracias por la ayuda

do-while

¡Buenas!

Estudia sobre asignacion dinamica de memoria.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

dooque

#2
Hola! como dice do-while vas a tener que usar memoria "dinamca", i.e. usar las funciones malloc() y calloc() y la mas importante free().

Aca te dejo las paginas del manual de las tres:
http://www.manpagez.com/man/3/malloc/

Basicamente "void * malloc(size_t size)" te davuelve un arreglo (buffer) de la cantidad de memoria que vos le pidas, "void * calloc(size_t count, size_t size)" es casi lo mismo con la diferencia que te devuelve un arreglo o buffer con la cantidad de elementos del tamaño que vos le digas, y ademas te devuelve la memoria inicializada a cero, cosa que malloc no hace, por ejemplo:


int *buffer = NULL;
buffer = (int *)malloc(100*sizeof(int));


te devuelve un arreglo con 100 enteros y la memoria sin inicializar.


int *buffer = NULL;
buffer = (int *)calloc(100, sizeof(int));


esto tambien te devuelve un arreglo de 100 enteros pero inicializados a cero.


Y la parte mas importante del uso de memoria dinamica es el free(), lo que hace es liberar la memoria que asignaste con malloc() o calloc(), por que si no, vas a tener una fuga de memoria o como es mas conocido "un memory leak" (http://es.wikipedia.org/wiki/Fuga_de_memoria), por ejemplo:


char *buffer = malloc(100*sizeof(char)); /* Esto es qeuivalente a char arreglo[100]; */
....
.... uso del buffer
....
free(buffer);


COROLARIO: No hay que olvidarse de liberar con free() cada puntero asgnado con malloc() o calloc(), i.e. deberias tener en tu codo la misma cantidad de llamas: #free() = #malloc() + #calloc(). Si bien esto no simpre anda es un buen ejersicio para acostumbrace a liberar la memoria.

Saludos!
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan

Fer995

gracias por las respuestas son muy buenas!

veo que hay mucha teoria detras de todo esto...

tendre que empollarmela un buen rato ejeje graias por todo