Stack Overflow en Lua (HM7)

Hola a todos,

El caso es que haciendo un nuevo juego, LPHM7 me ha mandado el error Stack Overflow. Por lo que he leído es por falta de memoria. Pero no veo por qué :S
Le había añadido un collectgarbage("collect") y un System.memclean() en algunas partes del script pero lo único que hace es no funcionar más :S :S :S

Les dejo un trozo de código. Si necesitan más avisen:

function colocar()
	local pos = math.random(5) -- El error ocurre aquí cuando colocar() es llamada por la funcioón reset()
	local col = math.random(9)
	local si = math.random(1000)
	if not casilla[pos].estado then
		if si >= 500 then
			cuadro[pos]:clear(color[col])
			casilla[pos].color = color[col]
		else
			cuadro[pos]:clear(SC)
			casilla[pos].color = SC
		end
		-- screen:blit(casilla[pos].x, casilla[pos].y, cuadro[pos])
		P2:blit(casilla[pos].x, casilla[pos].y, cuadro[pos])
		casilla[pos].estado = true
		screen.waitVblankStart()
	else
		colocar()
	end
	pos = nil
	col = nil
	si = nil
end
 
function reset()
	clearMem()
	screen:clear()
	P2:clear()
	SC = color[math.random(9)]
	for a = 1, 5 do
		colocar()
	end
	cur.img:clear(SC)
	CTRL()
	screen:print(0,0,puntos,color[4])
	screen:blit(0,0,P2)
	screen:blit(cur.x, cur.y, cur.img)
	shot()
	screen.flip()
	screen.waitVblankStart()
end

Un saludo y gracias de antemano :D


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de DeViaNTe

stack overflow

mm veamos, este error te sucede aleatoriamente me supongo.

Por qué sucede:
  reservas 3 locales, (posiciones en la pila)
  elije un numero aleatorio de 1 a 5, si casilla[pos].estado es false, ejecutas de nuevo la funcion.
  con lo que:
    reservas 3 locales (...
    elijes un numero aleatorio de 1....   si false ejecutas de nuevo.
    con lo que:
       reservas 3 locales...

Supongo que se me entiende. Aleatoriamente, es posible que enganxe uno detras de otro la creacion de locales con locales con locales con locales. sumando a que viene de un for con dos locales mas, dentro de otra funcion con otros niveles de pila y tal.. weno. todo sumado, kizás lleguen a darte un tamaño de pila no soportado por tu luaplayer.

crea un mejor flujo de control en colocar() evitando re-llamarse sobre si mismo sin tener un control de cuantas veces.


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de moikop

Excelente explicación,

Muchas gracias Dev. Ahora ya sé como solucionarlo :P

Un saludo.

Imagen de cristianrap

no uses

no uses la funcion system.memclean() ya que te quita bastante ram, usa solo el collectgarbage()

Imagen de --Gomasz--

?

¿que te quita ram? si lo que hace es liberar la ram del psp y en combinacion con collectgarbage() es mucho mejor.

saludos

Imagen de cristianrap

La practica te lo enseña...

Veras, descubri mientras programaba el homebrew que quiero presentar a scenery, en la carga de los 3 primeros scripts, siempre ponina collectgarbage() y system.memclean() y cuando llegaba el escritorio solo quedaban 16Mb de ram, un dia me dio por quitar el system.memclean() y cuando llego al escritorio tenia 18Mb de ram libres... la pratica lo dice todo =)

no tienes que poner dos

no tienes que poner dos numeros en el math.random? algo asi math.random(num1,num2)

 

saluD

Imagen de moikop

En realidad no.

Si te fijas bien en la documentación, math.random(m,[n]), verás que el segundo parametro (n) es opcional. Y en el caso de que n no exista, HM7 devuelve un numero aleatorio entre 1 y m.

Un saludo.


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.