elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  especificar dimensiones matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: especificar dimensiones matriz  (Leído 2,778 veces)
Fer995

Desconectado Desconectado

Mensajes: 17


Ver Perfil
especificar dimensiones matriz
« 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


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: especificar dimensiones matriz
« Respuesta #1 en: 19 Noviembre 2010, 06:21 am »

¡Buenas!

Estudia sobre asignacion dinamica de memoria.

¡Saludos!


En línea

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

Desconectado Desconectado

Mensajes: 170



Ver Perfil
Re: especificar dimensiones matriz
« Respuesta #2 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!
« Última modificación: 19 Noviembre 2010, 14:29 pm por dooque » En línea

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

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: especificar dimensiones matriz
« Respuesta #3 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines