Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: zukutrule en 06 de Febrero de 2004, 07:39:06 AM

Título: Stack Owerflow
Publicado por: zukutrule en 06 de Febrero de 2004, 07:39:06 AM
 Olas denuevos, komento, tengo 1 clase "objeto3d" y declaro un array de 55 elementos.. , todo bien.. declaro 56, y me salta un stak owerflow, si alguien sabe komo katso solucionarlo, agradecido stoy
Título: Stack Owerflow
Publicado por: CoLSoN2 en 06 de Febrero de 2004, 09:01:32 AM
 a que te refieres con "declaro 56"?
a hacer int a[56]; en vez de int a[55]; ? o a qué?
Título: Stack Owerflow
Publicado por: DraKKaR en 06 de Febrero de 2004, 12:16:36 PM
 Parece que diga que si declara un array de 55 elementos todo va bien, pero que si lo declara de 56 le salta ese error.
A mi me salio un error que rezaba el mismo mensaje, se debía a la gran recursividad que tenia en un algoritmo. Se solucionó poniendo en el Visual Studio:
Project -> Settings -> Link -> Output -> reserve memory = 100000000

XD
No estoy seguro de que fuera esa la ruta exacta, no puedo mirarlo porque ahora estoy en linux ;P
Título: Stack Owerflow
Publicado por: Zaelsius en 06 de Febrero de 2004, 12:28:28 PM
 ¿Por qué no pruebas a crear los 56 objetos dinámicamente (con new o malloc)?
Título: Stack Owerflow
Publicado por: fiero en 06 de Febrero de 2004, 01:56:51 PM
 ¿Las declaras dentro de una función? (Aunque sea la función principal). Los datos que se declaran dentro de las funciones se crean en la memoria de pila, por eso si declaras más de la cuenta  puedes desbordar (overflow) la pila (stack). Los datos declarados dentro de funciones deberían ser solo datos auxiliares temporales, por eso la pila no es muy grande (1MB por defecto)

Como bien dice DraKKaR, esto es lo que pone en la ayuda del Visual Studio para aumentar la memoria de pila:

CitarTo find this option in the development environment, click Settings on the Project menu. Then click the Link tab, and click Output in the Category box. The Reserve text box (or in the reserve argument on the command line) specifies the total stack allocation in virtual memory. The default stack size is 1 MB. The linker rounds up the specified value to the nearest 4 bytes.

pero la mejor solución en este caso es la que dice ZaelSiuS, declarar los datos dinámicamente, o declararlos de forma global, los datos globales no se crean en memoria de pila.

Por cierto, yo tuve un error de este tipo que me trajo de cabeza, porque programo en w2000 y por lo visto este error lo arregla el sistema operativo asignando más memoria a la pila dinámicamente. Sin embargo el programa en w98 cascaba. Tuve que instalar el VC en un ordenador con w98 para darme cuenta del error...

un saludo