Autor
|
Tema: Pequeña duda con "realloc" (SOLUCIONADO) (Leído 3,658 veces)
|
SARGE553413
Desconectado
Mensajes: 176
|
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
Mensajes: 373
|
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
Mensajes: 176
|
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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: int *ptro,*aux; if(!(ptro = malloc(10 * sizeof(int)))) else { if(!(aux = realloc(ptro ,20 * sizeof(int)))) //nos aseguramos de que se reasigna la memoria else ptro = aux; //y asignamos al puntero anterior la nueva direccion 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!
|
|
|
SARGE553413
Desconectado
Mensajes: 176
|
Ok gracias por la respuesta, lo intentaré así.
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
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
Mensajes: 176
|
Genial ya funciona muchas gracias por las respuestas, y gracias por el apunte del "stderr", lo he utilizado con fprintf.
Saludos.
|
|
|
En línea
|
|
|
|
|
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
|
8 Octubre 2012, 05:39 am
por Anonymous250
|
|
|
Problema con realloc :(
Programación C/C++
|
sherry_XD
|
4
|
2,550
|
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
|
22 Enero 2015, 20:12 pm
por programatrix
|
|
|
Duda con realloc
Programación C/C++
|
mester
|
5
|
3,722
|
6 Septiembre 2016, 18:29 pm
por MAFUS
|
|
|
(Solucionado) Duda implementando "HMAC-based One-time Password Algorithm"
Desarrollo Web
|
AlbertoBSD
|
8
|
3,640
|
23 Diciembre 2019, 00:03 am
por AlbertoBSD
|
|