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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pequeña duda con "realloc" (SOLUCIONADO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pequeña duda con "realloc" (SOLUCIONADO)  (Leído 3,658 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Pequeña duda con "realloc" (SOLUCIONADO)
« en: 7 Agosto 2012, 19:51 pm »

Hola a todos, tengo un problema con la función realloc.

El problema es que al redimensionar un vector de tamaño 3 o más con esta función, los datos que tenía en las componentes 0 y 1 pierden su valor y se convierten en numeros aleatorios raros.

(no estoy seguro de si el problema está en hacer el vector de tamaño>2, o el problema es usar repetidas veces esta función, porque la tengo dentro de un "while")

He probado escribiendolo así:(siendo c el puntero a vector y n un número entero cualquiera).

realloc(c,n*sizeof(int));
(int *) realloc(c,n*sizeof(int));
realloc((int *)  c,n*sizeof(int));

Ninguna de estas formas funciona.
¿Me ayuda alguien por favor?Muchas Gracias.


« Última modificación: 8 Agosto 2012, 22:09 pm por SARGE553413 » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Pequeña duda con "realloc"
« Respuesta #1 en: 7 Agosto 2012, 20:07 pm »

Hola! es raro que no te funcione, cualquiera de las 3 formas deberia andar. Seguro estas cometiendo otro error, subi todo el codigo


Saludos

PD: al redimensionar un vector, si este ya tiene datos, no deberia perderse dichos datos


En línea

Ahorrate una pregunta, lee el man
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Pequeña duda con "realloc"
« Respuesta #2 en: 7 Agosto 2012, 20:37 pm »

Ok, ahí val el código: (está en C a pelo, no C++)

/*********************************
*********************************/
void mini_aleatorio(int **f,int **c,int *tam,int *fila,int *columna)
{
    const int MAX=4;
    int i;
    i=0;
    *fila=rand() % MAX;
    *columna=rand() % MAX;
    while(i<*tam)
    {
        if(((*f)==*fila)&&((*c)==*columna))
        {
            *fila=rand() % MAX;
            *columna=rand() % MAX;
            i=-1;
        }
        i++;
        
    }
    *tam=(*tam)+1;
    realloc((int *) (*f),(*tam)*sizeof(int));
    realloc((int *) (*c),(*tam)*sizeof(int));
    (*f)[(*tam)-1]=*fila;
    (*c)[(*tam)-1]=*columna;
}

bueno ese algoritmo es llamado por otro mas grande, no creo que tenga importancia, lo importante es saber que este algoritmo está metido en un while, por tanto será llamado varias veces.

Gracias de antemano.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Pequeña duda con "realloc"
« Respuesta #3 en: 7 Agosto 2012, 22:48 pm »

¡Buenas!

Realloc devuelve un puentero al nuevo espacio de memoria asignado, que no tiene porque empezar en la misma posicion de memoria que el puntero original. Si no pudiese reasignar la memoria devolvera NULL y mantendra el puntero original intacto. Por lo tanto tendras que comprobar (como siempre) que la asignacion se ha hecho correctamente:

Código
  1.  
  2. int *ptro,*aux;
  3.  
  4. if(!(ptro = malloc(10 * sizeof(int))))
  5.    printf("Error");
  6. else
  7. {
  8.    if(!(aux = realloc(ptro,20 * sizeof(int)))) //nos aseguramos de que se reasigna la memoria
  9.        printf("Error");
  10.    else
  11.        ptro = aux; //y asignamos al puntero anterior la nueva direccion de memoria
  12. }
  13.  

¡Saludos!
En línea

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

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Pequeña duda con "realloc"
« Respuesta #4 en: 8 Agosto 2012, 12:02 pm »

Ok gracias por la respuesta, lo intentaré así. :D
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Pequeña duda con "realloc"
« Respuesta #5 en: 8 Agosto 2012, 15:15 pm »

Para marcar errores tienen el buffer de salida stderr no usen el stdout.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Pequeña duda con "realloc"
« Respuesta #6 en: 8 Agosto 2012, 22:09 pm »

Genial ya funciona muchas gracias por las respuestas, y gracias por el apunte del "stderr", lo he utilizado con fprintf.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado]Pequeña duda ip estatica a dhcp, mala confi /etc/network/interfaces
GNU/Linux
Anonymous250 3 3,051 Último mensaje 8 Octubre 2012, 05:39 am
por Anonymous250
Problema con realloc :(
Programación C/C++
sherry_XD 4 2,550 Último mensaje 4 Julio 2014, 17:38 pm
por do-while
Una pequeña aportación a eso de los "fantasmas"
Foro Libre
Orubatosu 9 2,692 Último mensaje 22 Enero 2015, 20:12 pm
por programatrix
Duda con realloc
Programación C/C++
mester 5 3,722 Último mensaje 6 Septiembre 2016, 18:29 pm
por MAFUS
(Solucionado) Duda implementando "HMAC-based One-time Password Algorithm"
Desarrollo Web
AlbertoBSD 8 3,640 Último mensaje 23 Diciembre 2019, 00:03 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines