Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does this loop cause a stack overflow?

Tags:

jquery

I decided to mess around with jquery and make a simple axonometric map based game. It renders some of the map, then has an issue with stack. (Maximum call stack size exceeded) I am just using background colors for the tiles for now.

JS Bin Here

var map = [
  "g","g","g","s","s",
  "g","g","s","s","w",
  "g","g","s","w","w",
  "g","g","s","w","w",
  "g","g","s","w","w"
];
var x = 0;
var y = 0;
var count = 0;
var background;
function init() { $.each( map, function( key, value ) {

    x += 30;
    y += 60;
  if (count > 4){
    x -= 120;
    y -= 360;
    count = 0;
  }
    if (value == "g"){background = "#00ff00";}
    if (value == "w"){background = "#0000ff";}
    if (value == "s"){background = "#ffff00";}

    $('.map_piece').clone().appendTo('body').css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background});
      count ++;
});
                }

$('document').ready(function(){
 init(); 

});
like image 501
Gary Hayes Avatar asked Sep 28 '14 04:09

Gary Hayes


People also ask

Can loops cause stack overflow?

If stackalloc is used in a loop, it can lead to stack overflows due to exhausting the stack memory.

What causes a stack overflow?

A stack overflow is a type of buffer overflow error that occurs when a computer program tries to use more memory space in the call stack than has been allocated to that stack.

Why does my loop go to infinite?

An infinite loop occurs when a condition always evaluates to true. Usually, this is an error.


1 Answers

In each iteration k, you clone 2^k items.

Instead of cloning an element, it might just be easier to create a new element each time:

$('<div class="map_piece">')
    .appendTo('body')
    .css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background});
like image 184
Ja͢ck Avatar answered Oct 25 '22 01:10

Ja͢ck