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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


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

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Vectores dinamicos
« en: 29 Octubre 2012, 22:31 pm »

hola tengo un preblema a la hora de usar vectores dinamicos en C, os cuento.
primero creo dos vectores:
int *m1,*m2;
m1=(int*)malloc(9*sizeof(int));
m2=(int*)malloc(9*sizeof(int));
les asigno valeros y compruevo que no hay problema, entonces creo un tercer vector
int *m3;
m2=(int*)malloc(9*sizeof(int));
Cuando empece a usarlos me empezaron a dar problemas y descubri un problema.El primer vector y el tercero tenian 4 espacios en comun en la asignacion de la memoria, con lo cual lo que ponia en la posicion 6 del primero de me ponia tambien en la 1 del 3. Como es esto posible si estan bien declarados.
Posdata: para avanzar en un vector uso un buble y avanzo en el vector con (m3+i*sizeof(int));


En línea

flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: Vectores dinamicos
« Respuesta #1 en: 29 Octubre 2012, 23:10 pm »

podrías poner el código así lo vemos... ;)


En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Vectores dinamicos
« Respuesta #2 en: 29 Octubre 2012, 23:11 pm »

no se si habra sido un error escribiendo aqui, pero por si acaso no te has fijado:

Citar
entonces creo un tercer vector
int *m3;
m2=(int*)malloc(9*sizeof(int));

si en el codigo no tienes este error, diria que eso no deberia pasar, pues la funcion malloc() devuelve un puntero nulo en el caso de que no haya esa memoria disponible (que para un vector de 9 enteros suele haberla...). lo mejor seria que postearas el trozo de codigo del problema para asi poderlo solucionar sin suposiciones y demas.

Citar
Posdata: para avanzar en un vector uso un buble y avanzo en el vector con (m3+i*sizeof(int));

que es un buble? igualmente, para avanzar puedes hacer simplemente: m3[ i] (el espacio es para que aqui no salga en cursiva).

un saludo!
En línea

latinoalfredo

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Vectores dinamicos
« Respuesta #3 en: 30 Octubre 2012, 09:20 am »

aqui os pongo el codigo de la funcion que recibe dos de los vectores y los suma en un tercero.

Código:
void sumar(int *m1,int *m2,int fm1,int cm1)
{
    int *m3,i,j,X;
    m3=(int*)malloc(fm1*cm1*sizeof(int));
            for (i=0;i<fm1;i++)
        {
            for (j=0;j<cm1;j++)
            {
                X=*(m1+(i*fm1+j)*sizeof(int))+*(m2+(i*fm1+j)*sizeof(int));
                *(m3+(i*fm1+j)*sizeof(int))=X;
               
            }
        }
        for (i=0;i<fm1;i++)
        {
            for (j=0;j<cm1;j++)
            {
                printf ("%d ",*(m3+(i*fm1+j)*sizeof(int)));
            }
            printf ("\n");
        }
este vector m3 es el que parece que comparte un trozo de memoria con m1, ya que si les digo que imprimar todas sus posiciones el 1 y el 3 tienen 4 iguales.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Vectores dinamicos
« Respuesta #4 en: 30 Octubre 2012, 11:17 am »


int *m3;
m2=(int*)malloc(9*sizeof(int));<== aqui deberia ir m3= y no m2=


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Vectores dinamicos
« Respuesta #5 en: 30 Octubre 2012, 16:28 pm »

El problema lo tienes al realizar la aritmética de punteros, tu la realizas en la forma:
Código
  1. X = *(m1 + (i * fm1 + j) *sizeof(int)) + *(m2 + (i * fm1 + j) * sizeof(int));
En cada una de las expresiones multiplicas al indice por "sizeof(int)", honestamente no entiendo porque.


En C la aritmética de punteros tiene un ajuste automático en base al tipo apuntado. En buen cristiano significa que:
Código
  1. a + i
Es la dirección en memoria del elemento con indice "i" en el array "a" sin importar el tipo, eso es transparente para el programador.

Y para acceder al objeto apuntado se utiliza:
Código
  1. *(p + i) /* Objeto en la posicion "i" del array */
  2.  
  3. /* O bien */
  4.  
  5. a[ i ]     /* Objeto en la posicion "i" del array */

En cuanto a la función "sumar" primero tienes que indicar que parámetros recibe (los nombres no son descriptivos) y la operación que debe realizar.

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
latinoalfredo

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Vectores dinamicos
« Respuesta #6 en: 30 Octubre 2012, 22:57 pm »

gracias rir3760 tu respuesta soluciono mi problema.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Formularios dinámicos con XML
Programación Visual Basic
J. Carlos 0 1,516 Último mensaje 31 Enero 2008, 14:26 pm
por J. Carlos
modulos dinamicos
PHP
johnwmartinez 6 3,263 Último mensaje 31 Marzo 2008, 07:25 am
por coolfrog
Vectores Dinamicos
Programación C/C++
ANTÓN RAMIREZ 0 4,623 Último mensaje 14 Diciembre 2010, 20:50 pm
por ANTÓN RAMIREZ
Ayuda Vectores Dinámicos
Programación C/C++
windic 3 2,228 Último mensaje 8 Octubre 2014, 22:02 pm
por ivancea96
Consulta de un noob sobre vectores dinamicos para char
Programación C/C++
Akumadie 2 1,975 Último mensaje 23 Noviembre 2016, 03:08 am
por Akumadie
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines