stack overflow

M3
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:42
0

W moim programie używam rekurencji do tworzenia labiryntu i znajdowania drogi w labiryncie.
Przy planszy 200 x 50 program działa w nieskończoność,
ale jak np podwoję rozmiary to narysuje tylko kilka labiryntów i wyskakuje "stack overflow".
No i dziwi mnie tylko to, że ten error wyskakuje przy tworzeniu tablicy 4 liczb, w funkcji która produkuje kolejność kierunków drążenia drogi w labiryncie.

Kopiuj
funkcja() {
	int* byla = new int[4];     // Stack overflow!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           ... // coś tam.
           delete byla;   // tablica jest na końcu usuwana.
}

Poza tym funkcje rekurencyjne biorą tylko 2 parametry int więc nie zabierają dużo pamięci.

edytowany 5x, ostatnio: madmike
byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
0

Ale pewnie ta funkcja jest wywoływana zbyt wiele razy. Za mało kodu pokazałeś, żeby coś móc z tego wywnioskować.


Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  1. Nie używa się w ten sposób rekurencji, a przynajmniej nie w takim języku
  2. Na stosie masz też wszystkie lokalne zmienne...

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

Daj to "// coś tam" i postaraj się skorzystać z rekurencji ogonowej. To normalna funkcja czy może konstruktor?

M3
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:42
0

Tego chyba się nie da zrobić rekurencją ogonową, albo przynajmniej w miarę trudno, bo jak algorytm generuje ślepy zaułek, to wraca do momentu, gdzie można pójść inną drogą. Na pewno stosem się to da zrobić.
To, co dałem to zwykła funkcja pomocnicza, dla funkcji generującej labirynt.

edytowany 2x, ostatnio: marcos3131

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.