Título: Problema con asignación dinamica de memoria. Publicado por: ThePinkPanther en 2 Febrero 2013, 23:44 pm Código: //includes estaba haciendo programa , el siguiente : Citar Escriba un programa que lea los datos de un alumno:nombre, apellido, y una lista de calificaciones correspondiente a todos sus exámenes finales (se desconoce a priori el número de exámenes rendidos). El programa debe calcular el promedio del alumno en la carrera en informarlo en pantalla. al introducir mas de 5 notas, me tira error de ... *** glibc detected *** /home/mmokk/Escritorio/dinamico: realloc(): invalid next size: 0x08fc30a8 *** lei que cuando el puntero es NULL , la funcion realloc funciona como malloc, después cuando el puntero tiene asignada una direccion de memoria que apunta a la memoria , después de 5 notas sale el error descrito arriba. Compilo bajo ubuntu linux con g++ .. Alguien puede ayudarme ?. Gracias de antemano :P Título: Re: Problema con asignación dinamica de memoria. Publicado por: naderST en 3 Febrero 2013, 01:21 am Estás reservando un elemento menos en cada iteración:
Código En la primera iteración contador es cero estás reservando cero bytes... deberías hacer "contador + 1" ya que necesitas reservar espacio para contador+1 elementos. EDIT: No había leído el enunciado del problema, no hace falta utilizar memoria dinámica, simplemente puedes ir sumando las notas y llevar un contador de las notas que ha ido introduciendo y luego sacas la media con eso. Título: Re: Problema con asignación dinamica de memoria. Publicado por: ThePinkPanther en 3 Febrero 2013, 01:35 am Estás reservando un elemento menos en cada iteración: Perfecto gracias , pero aunque a contador lo inicialize en 1 como acabo de hacer, en vez de a los 5 , a las 4 notas surge el siguiente error..Código En la primera iteración contador es cero estás reservando cero bytes... deberías hacer "contador + 1" ya que necesitas reservar espacio para contador+1 elementos. *** glibc detected *** /home/mmokk/Escritorio/Programacion/dinamico: realloc(): invalid next size: 0x08b820a8 *** Título: Re: Problema con asignación dinamica de memoria. Publicado por: naderST en 3 Febrero 2013, 01:38 am Perfecto gracias , pero aunque a contador lo inicialize en 1 como acabo de hacer, en vez de a los 5 , a las 4 notas surge el siguiente error.. *** glibc detected *** /home/mmokk/Escritorio/Programacion/dinamico: realloc(): invalid next size: 0x08b820a8 *** Si lo inicias en uno debes asegurarte de cuando accedas a un elemento del arreglo lo hagas de la siguiente manera: notas[contador-1]=aux; ya que el arreglo va de 0 a n-1 Título: Re: Problema con asignación dinamica de memoria. Publicado por: ThePinkPanther en 3 Febrero 2013, 01:52 am Mi problema se soluciono . muchisimas gracias (:
Título: Re: Problema con asignación dinamica de memoria. Publicado por: amchacon en 3 Febrero 2013, 03:46 am Una cosa, en C++ tienes el operador new/delete para reservar dinámicamente la memoria, no necesitas el alloc:
Código
Título: Re: Problema con asignación dinamica de memoria. Publicado por: ThePinkPanther en 3 Febrero 2013, 04:19 am Una cosa, en C++ tienes el operador new/delete para reservar dinámicamente la memoria, no necesitas el alloc: Código
Gracias .. se que se escapa del tema pero... si uso Código
el segundo new funcionaria como realloc ? como haria la reasignación de memoria cuando ya invoque a new antes ? saludos Título: Re: Problema con asignación dinamica de memoria. Publicado por: amchacon en 3 Febrero 2013, 12:09 pm Gracias .. se que se escapa del tema pero... si uso Cada llamada a new, reserva una porción de memoria y te devuelve el puntero con la dirreción.Código
el segundo new funcionaria como realloc ? como haria la reasignación de memoria cuando ya invoque a new antes ? saludos Si pones dos llamadas seguidas, harán lo mismo, pero al hacer la segunda perderías la dirreción de la anterior y tendrías una fuga de memoria: http://www.youtube.com/watch?v=Y9eYr8zGGIg Tienes que borrar la memoria cogida antes de hacer un nuevo new: Código
Para más información: http://c.conclase.net/curso/index.php?cap=013b Título: Re: Problema con asignación dinamica de memoria. Publicado por: rir3760 en 3 Febrero 2013, 17:31 pm se que se escapa del tema pero... si uso No.Código
el segundo new funcionaria como realloc? como haria la reasignación de memoria cuando ya invoque a new antes ? En C++ evitas la reasignación, en su lugar utilizas un contenedor, por ejemplo la clase vector.Un saludo Título: Re: Problema con asignación dinamica de memoria. Publicado por: ThePinkPanther en 4 Febrero 2013, 00:56 am Citar No había leído el enunciado del problema, no hace falta utilizar memoria dinámica, simplemente puedes ir sumando las notas y llevar un contador de las notas que ha ido introduciendo y luego sacas la media con eso. es verdad.solo lo hice de practica.. Gracias por sus ayudas.. me sirvieron . UN SALUDO ! |