Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: diegomore97 en 8 Agosto 2018, 06:22 am



Título: Mi programa truena solo la primera vez que se ejecuta y despues sirve
Publicado por: diegomore97 en 8 Agosto 2018, 06:22 am
Buenas tardes compañeros tengo un problema con un programa en c++ son listas y punteros lo raro aqui es que cuando abro el programa por primera vez me truena y despues al ejecutar el programa por segunda vez ya me funciona con normalidad, pero al reiniciar el equipo regresa al mismo problema :c

alguien que me pueda orientar, les dejo el link de mi programa:

https://github.com/diegomore97/Calculadora-Basica-Listas


Título: Re: Mi programa truena solo la primera vez que se ejecuta y despues sirve
Publicado por: engel lex en 8 Agosto 2018, 06:38 am
es un programa de más de 500 lineas, probablemente es un puntero o variable sin inicializar

usa el debugger de tu ide y busca en que linea falla, entonces indicas cual


Título: Re: Mi programa truena solo la primera vez que se ejecuta y despues sirve
Publicado por: CalgaryCorpus en 8 Agosto 2018, 07:22 am
Mire' solo el final de ese kilometrico programa y al menos tienes un problema en la funcion copiaOperacion pues pides memoria para una cierta cantidad de elementos, digamos n+1, copias n caracteres, un + y un 0.

Si pides n+1 elementos en memoria y copias n+2, estas invitando a que tu programa se porte mal. O copias menos o pides mas, decidete, tal como lo tienes es una receta para el desastre.

Tal vez haya otro problema similar por ahi, te recomiendo recortar tu programa para depurarlo si se sigue portando mal. Tal como esta se hace dificil adivinar donde esta mal algo.


Título: Re: Mi programa truena solo la primera vez que se ejecuta y despues sirve
Publicado por: diegomore97 en 8 Agosto 2018, 19:31 pm
Me salio esto, error en la linea 255 en la biblioteca operacion.h pero pues todos los metodos de insertar son iguales y si me funcionan


Título: Re: Mi programa truena solo la primera vez que se ejecuta y despues sirve
Publicado por: diegomore97 en 10 Agosto 2018, 01:10 am
Que hay mens ya regrese, les traigo novedades ya se que no podian dormir por no saber como termino mi caso, tras darme de topes todo el dia tratando de resolver el problema los 2 tenia razon, admin: el programa me tronaba porque no inicialize un puntero del constructor de una clase lo iguale a null y ya todo fine no me tronaba pero el resultado me lo daba mal por la funcion copia operacion, aqui es donde entra el comentario del otro men, Calgary: tenia razon reservaba memoria de mas en la funcion copiaOperacion finalmente reserve lo que iba a ocupar y despues lo liberaba con free la funcion quedo asi "char *aux= (char*)malloc(tamanioCadena*sizeof(char)); ", si quieren calar el programa son bienvenidos : https://github.com/diegomore97/Calculadora-Basica-Listas, la verdad si me moleste porque no corrigieron el problema directamente, pero tambien estoy agradecido porque me ayudaron a que yo mismo me pusiera a trabajar y encontrara la solucion yo mismo (como los psicologos xd)

una ultima pregunta: porque despues de que tronaba por primera vez el programa despues de abrirlo nuevamente funcionaba correctamente?

Saludos


Título: Re: Mi programa truena solo la primera vez que se ejecuta y despues sirve
Publicado por: CalgaryCorpus en 10 Agosto 2018, 07:13 am
Si utilizas mal la memoria, como en el caso de tu programa anterior que sobreescribia memoria, no existe garantia que esto siempre se caiga, o que siempre funcione, si tiene algun comportamiento deterministico, es suerte. Desde mi punto de vista, tienes suerte que el programa se caiga y te permita descubrir sus errores. Muchos problemas en el software se presentan despues de mucho tiempo, por ejemplo, grandes fallas de seguridad han pasado an~os sin ser descubiertas.

(Otras observaciones:
 - Interpretaste mal lo que dije. Nunca dije que estabas reservando memoria de mas, al reves, quise decir que estabas pidiendo memoria insuficiente, y copiando de mas en esa memoria insuficiente.
 -  sizeof(char) es siempre 1, no necesitas hacer la multiplicacion por sizeof(char), pues ya sabes que la multiplicacion por 1 es superflua.
)