SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: vhgmaya en Lunes 24 de Octubre de 2005, 20:35

Título: Matrices Dinamicas
Publicado por: vhgmaya en Lunes 24 de Octubre de 2005, 20:35
#include<stdio.h>
#include<stdlib.h>
/*declaracion matriz*/
int *matriz;
int a,b;
/* decalracion variables*/
int x,y,i,j,cont=0;
/*inicio*/
main()
{
        matriz = (int *) malloc (sizeof(int)*a*B);
        for(x=1;x<=2;x++)
        {
                for(y=1;y<=2;y++)
                {
                        printf("[%d][%d]=>",x,y);scanf("%d",&matriz[x, y]);//sile pongo matriz
                }
        }
        for(i=1;i<=2;i++)
        {
                for(j=1;j<=2;j++)
                {
                        printf("%d",matriz [i, j]);//lo mismo de arriva solo imprime los dos ultimos 2 veses
                }
        }
}
Título: Re: Matrices Dinamicas
Publicado por: Amilius en Lunes 24 de Octubre de 2005, 21:21
1. el primero es el 0, no el 1.
2. con scanf siempre & por que es parámetro de salida.
3. no inicializaste a ni b
4. no usas ni a ni b en tus ciclos
5. -> arriba -> veces
6. no liberaste la memoria
7. al reservarla a ni b están definidas
Título: Re: Matrices Dinamicas
Publicado por: LeGatoRojo en Sábado 29 de Octubre de 2005, 02:29
"printf("[%d][%d]=>",x,y);scanf("%d",&matriz[x, y]);//sile pongo matriz

Salen solo los 2 ultimos por que es lo que le dices, necesitas usar un ciclo dentro de otro para moverte tambien en x, claro si hubieras puesto un apuntador a un arreglo de apuntadores, pero tan solo usas un apuntador normal.
Título: Re: Matrices Dinamicas
Publicado por: scullyERA en Jueves 10 de Noviembre de 2005, 15:41
     Efectivamente, como dice el buen Darktiger estas usando un apuntador normal, necesitas declarar matriz como un doble apuntador para poder usarlo como matriz y no como vector:
  ;) suponiendo que a son tus filas y b son tus columnas
Código: Text
  1.  int **matriz; //declaras matriz como doble puntero
  2.  matriz= new (int *[a]);//asignas espacio en memoria para las filas
  3.  for (cont=0; cont &#60; a; cont++)
  4.    matriz [cont]= new (int *[b]);//asignas espacio en memoria para las columnas de cada fila
  5.  
  6.  
    Claro, además de todos los demás "pequeños" errores que te mencionaron:
[/color]
[color= red]a.- no inicializas a ni b, por lo que no se sabe cuanto espacio en memoria se asignara a matriz
b.- el primer elemento de un arreglo es 0, no 1
c.- no usas a ni b como valores en las condiciones de repeticion de los ciclos
[/color]