• Viernes 15 de Noviembre de 2024, 12:44

Autor Tema:  Duda con la funcion malloc  (Leído 1391 veces)

Hammerstrike

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Duda con la funcion malloc
« en: Jueves 25 de Septiembre de 2008, 00:16 »
0
Hola, tengo una duda super pequeña.

La funcion malloc conserva los datos cuando reserva la memoria??? Me explico, si quisiera reservar memoria para un vector y mas adelante quisiera agregar mas elementos, malloc conserva los datos iniciales??

Es todo
De antemano gracias.
Se que me puedes ver. No me puedes oir. Pero lo que hiciste no tiene NOMBRE...
Terminaste por cerrar hasta la mas minima ventana que habia entre nosotros...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con la funcion malloc
« Respuesta #1 en: Jueves 25 de Septiembre de 2008, 04:00 »
0
Mmmm bueno, hay un detalle, te explico, cuando reservas memoria con malloc, esa memoria se conserva hasta que hagas free, o sea que tus datos no se pierden, pero existe un detalle, cuando tu defines espacio en memoria para un vector, y si despues quisieras hacer mas grande el vector, no se puede, porque te asigna la cantidad de manera continua, entonces, si tu definieras 2 vectores de 10 elementos con malloc, no podrias hacer mas grande el primero porque inmediatamente despues se encuentra el segundo vector, y encimarias esa memoria.

La solucion seria implementar el vector por medio de listas enlazadas, en una lista enlazada, los elementos no tienen porque estar de manera continua, pueden estar separados, ya que cada elemento contiene un campo extra apuntador que valga la redundancia "apunta" a la direccion de memoria en donde se encuentra el siguiente elemento.

Tambien podrias crear un vector con mas elementos, copiar los elementos del primer vector al segundo vector, y liberar el primer vector, pero si son muchos datos, no seria muy eficiente, asi que lo mejor es usar listas enlazadas o doblemente enlazadas.

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Hammerstrike

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Duda con la funcion malloc
« Respuesta #2 en: Jueves 25 de Septiembre de 2008, 04:31 »
0
Cita de: "ProfesorX"
Mmmm bueno, hay un detalle, te explico, cuando reservas memoria con malloc, esa memoria se conserva hasta que hagas free, o sea que tus datos no se pierden, pero existe un detalle, cuando tu defines espacio en memoria para un vector, y si despues quisieras hacer mas grande el vector, no se puede, porque te asigna la cantidad de manera continua, entonces, si tu definieras 2 vectores de 10 elementos con malloc, no podrias hacer mas grande el primero porque inmediatamente despues se encuentra el segundo vector, y encimarias esa memoria.

La solucion seria implementar el vector por medio de listas enlazadas, en una lista enlazada, los elementos no tienen porque estar de manera continua, pueden estar separados, ya que cada elemento contiene un campo extra apuntador que valga la redundancia "apunta" a la direccion de memoria en donde se encuentra el siguiente elemento.

Tambien podrias crear un vector con mas elementos, copiar los elementos del primer vector al segundo vector, y liberar el primer vector, pero si son muchos datos, no seria muy eficiente, asi que lo mejor es usar listas enlazadas o doblemente enlazadas.
Muchas gracias. Me ha quedado muy claro. De todas maneras, lo que estaba haciendo estaba mal, asi que descubri el error ya ahora lo estoy corrigiendo.
Se que me puedes ver. No me puedes oir. Pero lo que hiciste no tiene NOMBRE...
Terminaste por cerrar hasta la mas minima ventana que habia entre nosotros...

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Duda con la funcion malloc
« Respuesta #3 en: Jueves 25 de Septiembre de 2008, 09:20 »
0
No hacen falta listas ni demás. Si quieres agrandar un espacio ya reservado por malloc(), mírate realloc(). De nada.