olas.. todo bien?
programando estaba felizmente cuando al crear un array
int var[322] me encontre con un error de windows.... "oh my god" dije (bueno.. no exactamente :P) y corri el debugger... lo q me temia: stack overflow.
ya me habia pasado antes.. y por suerte alguien en el canal de c++ de irc-hispano me ayudo a arreglarlo (creo q fue ethernet), porq era un error mio en los arrays.. q hize asi:
int array[10];
array[10] = 78;
printf("%d",array[10]);
esto funciona bien.. pero esta mal!! y al no chekear los array bounds... en cierto momento no me dejo crear mas variables.. y bueno.. stack overflow..
recordando eso, revise todo el codigo... pero los arrays estaban todos bien... en internet lo unico q lei q recomendaron era aumentar el stack.. pero no creo q sea eso.. si no estoy usando muchas variables.. hago
int var[85] y anda bien, hago
int var[86] y me dice q el programa se cerro, pero sin tirar error, hago
int var[87] y ahi si me tira error...
en fin.. abri este thread para q me digan en q fijarme... porq la verdad es q ni sikiera se ejecuta el main.. osea:
int main()
{
cout << "ola" << endl;
}
me tira error antes de q salga "ola" en la consola :(
el codigo por si alguien lo kiere ver es este:
http://keng.sourceforge.net/Keng.rarpor sierto... el engine es open source, usa SDL (2D mode on, 3D mode coming soon :D), bueno uso c++.. y.... nada eso.. bueno chau
Una vez me pasó algo parecido, aunque no recuerdo si el caso era el mismo.
Tenía varios arreglos muy grandes, algunos de enteros, otros de estructuras...
llegó un momento enque la cosa ya no servía >_<
aunque no recuerdo si no compilaba o no se ejecutaba...
como sea, la solución que me dió un maestro fue:
crear los arreglos con memoria dinámica
y problema resuelto (ole)
Intenta hacer eso, tal vez funcione :P
yo lo que creo es que es cosa de saber que en C, cuando declaras
int var[10];
el arreglo va del 0 al 9
Cita de: "vicho"yo lo que creo es que es cosa de saber que en C, cuando declaras
int var[10];
el arreglo va del 0 al 9
Cierto, y si no veo mal en el código, estás intentado asignar el valor 78 al array[10], que no se ha creado. Hazlo con array[9] haber si es eso.
no claro.. eso puse q me paso antes.. pero ya lo habia arreglado..
osea, q porq me paso eso, ahora revise cada uno d los arrays a ver si se asignaban correctamente.. pero el error no esta ahi, y solo se revisar arrays para arreglar ese error :S
por eso puse esto funciona bien.. pero esta mal!!
eso d la memoria dinamica lo voy a probar, gracias por el dato
gracias por responder, saludos
Las variables estáticas de un programa se guardan (normalmente) en la pila. Si el espacio que necesitas para ellas es muy grande, puedes acabar con un desbordamiento de pila como el que comentas. Cuando tengas que crear arrays grandes, deberías hacerlo dinámicamente, de forma que el array se cree en el heap. Por ejemplo, en tu caso tendrías que hacer algo así como:
int *var;
// ... y luego, dentro del código:
var = ( int * ) malloc( 322 * sizeof( int ) );
sync
ah.. muchas graciasss.... ahora una ultima duda.. el heap entonces tiene mas capacidad q el stack???
saludos
Cita de: "synchrnzr"Las variables estáticas de un programa se guardan (normalmente) en la pila. Si el espacio que necesitas para ellas es muy grande, puedes acabar con un desbordamiento de pila como el que comentas. Cuando tengas que crear arrays grandes, deberías hacerlo dinámicamente, de forma que el array se cree en el heap.
Eso quise decir :rolleyes: con lo de los arreglos dinámicos :P
No se supone que las zonas de "heap" y "pila" crecen en direcciones opuestas (misma dirección, opuesto sentido ;)) ?; luego si se agota una, es que ha llegado a la otra, y por tanto tampoco cabe más para esa zona. O es que la pila en sí misma tiene un límite añadido? (O es que la colocación de heap y pila es dependiente de S.O.?)