I am facing one problem on the memory allocation of a local variable. Here's the link for the code https://ideone.com/3O9522 when the Data arrays (data1, dat2, data3, data4) are declared local.
unsigned char *PutData1[2];  
unsigned char *PutData2[2];  
void call_func1(unsigned char x, unsigned char *Test1, unsigned char *Test2)
{  
PutData1[x] = Test1;   
PutData2[x] = Test2;  
if (x== 0)  
{  
printf("Init PutData1: %02x %02x %02x %02x  \n", PutData1[0][0], 
PutData1[0][1], PutData2[0][0], PutData2[0][1]);
}  
if (x== 1)  
{  
printf("PutData2: %02x %02x %02x %02x  \n", PutData1[1][0], PutData1[1]
[1],PutData2[1][0], PutData2[1][1] );  
printf("Afer PutData1: %02x %02x %02x %02x  \n", PutData1[0][0], PutData1[0]
[1], PutData2[0][0], PutData2[0][1]);  
}  
}  
void Func1(void)  
{  
unsigned char Data1[2] = { 0xAB, 0xCD };  
unsigned char Data2[2] = { 0xDE, 0xAE };  
call_func1(0, &Data1[0], &Data2[0]);  
}  
void Func2(void)  
{  
unsigned char Data3[2] = { 0x44, 0x33 };  
unsigned char Data4[2] = { 0x11, 0x55 };  
call_func1(1,&Data3[0], &Data4[0]);  
}  
int main(void) {  
Func1 ();  
Func2 ();  
return 0;  
}  
After calling call_func1 (1, &Data3[0], &Data4[0]), values at Data1 and Data2 arrays are overwritten
Here's the link for the code https://ideone.com/I00OZj
when the Data arrays are declared global. After calling call_func1 (1, &Data3[0], &Data4[0]), values at Data1 and Data2 arrays are retained. Can anyone explain for such behaviour.
 
    