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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  matrices y memoria dinamica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: matrices y memoria dinamica  (Leído 1,838 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
matrices y memoria dinamica
« en: 22 Noviembre 2013, 23:13 pm »

Saludos

si tengo  una matriz n x n, a la que quiero asignarle memoria dinamicamente porque su tamaño solo se puede saber en tiempo de ejecucion, cual es la manera correcta de hacerlo?

Código
  1. char **tablero;
  2.      tablero = (char**)malloc(tamanio*sizeof(char*);

o esta otra:

Código
  1. char **tablero;
  2. tablero = (char**)malloc(n*sizeof(char));
  3.    for(i = 0;i < n;i++)
  4.       tablero[i] = (char*)malloc(n*sizeof(char));

otra duda, estaba leyendo un manual sobre memoria dinamica y me decia que si hacia algo como esto me iba a dar error de compilacion que porque el compilador requiere que el tamaño del array o de la matriz sea constante:

Código
  1. int main()
  2. {
  3.  
  4.    int num_estudiantes,i;
  5.    printf("Dame numero de estudiantes: ");
  6.    scanf("%d",&num_estudiantes);
  7.    int asignatura[num_estudiantes];
  8.    for(i = 0;i < num_estudiantes;i++)
  9.    {
  10.        printf("Dame un numero \n");
  11.        scanf("%d",&asignatura[i]);
  12.    }
pero ya lo probe y me compila correctamente, a que se debe esto??

gracias


« Última modificación: 23 Noviembre 2013, 00:44 am por m@o_614 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: matrices y memoria dinamica
« Respuesta #1 en: 23 Noviembre 2013, 02:28 am »

Cuando tengas una duda por favor indica el lenguaje de programación.

si tengo  una matriz n x n, a la que quiero asignarle memoria dinamicamente porque su tamaño solo se puede saber en tiempo de ejecucion, cual es la manera correcta de hacerlo?
La segunda. Dos detalles a considerar son 1) en C no es necesaria la conversión explicita y 2) en C y C++ no es necesario utilizar "sizeof(char)" ya que este siempre es igual a uno.

otra duda, estaba leyendo un manual sobre memoria dinamica y me decia que si hacia algo como esto me iba a dar error de compilacion que porque el compilador requiere que el tamaño del array o de la matriz sea constante

[...]

pero ya lo probe y me compila correctamente, a que se debe esto??
* En C++ no es valido.
* En C depende del modo de compilación: C90 no lo soporta, C99 si (array de longitud variable o VLA) y C11 también lo soporta pero como una característica opcional.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: matrices y memoria dinamica
« Respuesta #2 en: 23 Noviembre 2013, 06:32 am »

muchas gracias rir3760, con respecto a sizeof(char), o sizeof(int) o el tipo que sea, me he fijado que cuando le asignan dinamicamente memoria en algunos casos lo ponen como:

Código
  1. int main()
  2. {
  3.    char **tablero;
  4.    tablero = (char**)malloc(n*sizeof(char*));
  5.    return 0;
  6. }
  7.  
indicando que es un puntero a char en el sizeof, y en otros casos lo ponen as,(suponiendo que ahora la variable es de tipo int):

variable = (int**) malloc(n*sizeof(int));

por que en algunas ocasiones lo ponen como puntero y en otras no
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: matrices y memoria dinamica
« Respuesta #3 en: 23 Noviembre 2013, 15:53 pm »

De nuevo: cuando tengas una duda por favor indica el lenguaje de programación.

¿Modificaste el segundo fragmento de tu primer mensaje?

En C para implementar una matriz el idioma es:
Código
  1. T **mat;
  2.  
  3. /* ... */
  4.  
  5. mat = malloc(NUM_FILAS * sizeof *mat);
  6. for (i = 0; i < NUM_FILAS; i++)
  7.   mat[i] = malloc(NUM_COLS * sizeof *mat[i]);
Donde "T" es el tipo de los elementos de la matriz, la ventaja de esta forma es no tener que indicar el tipo apuntado al reservar memoria.

por que en algunas ocasiones lo ponen como puntero y en otras no
Porque depende del programa, cuando se reserva memoria siempre se utiliza el operador sizeof con el tipo del objeto apuntado, por ejemplo:
Código
  1. /* Ejemplo 1: el tipo apuntado es *p == int */
  2. int *p;
  3.  
  4. p = malloc(ALGUN_VALOR * sizeof *p);
  5.  
  6. /* Ejemplo 2: el tipo apuntado es *q == int (*[10])(void) */
  7. int (*(*q)[10])(void);
  8.  
  9. q = malloc(ALGUN_VALOR * sizeof *q);

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Asignacion Dinamica Memoria
Programación C/C++
charmedever 5 3,429 Último mensaje 21 Octubre 2011, 05:25 am
por charmedever
Pregunta Memoria Dinámica En "Matrices" « 1 2 »
Programación C/C++
ZedGe 12 4,631 Último mensaje 2 Diciembre 2011, 03:49 am
por ZedGe
Memoria dinámica
Programación C/C++
eleon 6 4,806 Último mensaje 24 Enero 2012, 22:17 pm
por Eternal Idol
Memoria dinamica matriz
Programación C/C++
programacion_c 1 2,817 Último mensaje 25 Abril 2012, 00:23 am
por david_BS
Problema con Matrices de memoria Dinamica
Programación C/C++
Saikilito 2 2,049 Último mensaje 20 Julio 2017, 20:02 pm
por Saikilito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines