Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Fer995 en 19 Noviembre 2010, 04:23 am



Título: especificar dimensiones matriz
Publicado por: Fer995 en 19 Noviembre 2010, 04:23 am
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


Título: Re: especificar dimensiones matriz
Publicado por: do-while en 19 Noviembre 2010, 06:21 am
¡Buenas!

Estudia sobre asignacion dinamica de memoria.

¡Saludos!


Título: Re: especificar dimensiones matriz
Publicado por: dooque en 19 Noviembre 2010, 14:25 pm
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:

Código:
int *buffer = NULL;
buffer = (int *)malloc(100*sizeof(int));

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

Código:
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:

Código:
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!


Título: Re: especificar dimensiones matriz
Publicado por: Fer995 en 19 Noviembre 2010, 15:31 pm
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