why does array initialization in function other than main is temporary? [on hold]
- by shafeeq
This is the code in which i initialize array "turn[20]" in main as well as in function "checkCollisionOrFood()",the four values turn[0],turn[1],turn[2],turn[3] are initialized to zero in main function,rest are being intialized in "checkCollisionOrFood()".This is where fault starts.when i initialize turn[4]=0 in "checkCollisionOrFood()" and then access it anywhere,it remains 0 in any function,but! when i initialize next turn[] i.e turn[5],the value of turn[4] gets depleted .i.e turn[4] have garbage value.turn[20] is global variable,its index"head" is also global.I'm stuck.Plz help me get out of it.Ishall be highly obliged for this act of kindness.This is my excerpt of code
unsigned short checkCollisionOrFood(){
head=(head+1)%20;
if(turn[head-1]==0){
    turn[head]=0;
/this is where turn[] is iniliazized and if i access turn[head] here i.e just after iniliazition then it gives correct value but if i access its previous value means turn[head-1]then it gives garbage value/
    rowHead=(rowHead+1)%8;
    if(!(address[colHead]&(1<<rowHead)))return 1;
    else if((address[colHead]&(1<<rowHead))&&
    (!((colHead==foody)&&(rowHead==foodx))))gameOver();
    else return 0;
    }
if(turn[head-1]==1){
    turn[head]=1;
    colHead=(colHead+1)%8;
    if(!(address[colHead]&(1<<rowHead)))return 1;
    else if((address[colHead]&(1<<rowHead))&&
    (!((colHead==foody)&&(rowHead==foodx))))gameOver();
    else return 0;
    }
}
void main(void)
{
turn[0]=0;turn[1]=0;turn[2]=0;turn[3]=0;
/these values of turn[] are not changed irrespective of where they are accessed./
while (1)
  {
  if(checkCollisionOrFood())
    {
    PORTB=(address[colHead] |=1<<rowHead);
    turnOffTail();
    blink();
    }
  else
    {
    PORTB=address[colHead];
    createFood();
    blink();
    }
  }
}
Plz help me.