#include <iostream>
#include <string.h>
using namespace std;
/*
 The functions defined below are attempting to return address of a local 
 variable and if my understand is correct...the main function should be
 getting garbage.
*/
int *test1(){
   int a[2]={1,2};
   return a; //returning address of a local variable - should not work.
}
char *test2(){
   char a[2]={'a','b'};
   return a; //returning address of a local variable - should not work.
}
char *test3(){
   char a[1];
   strcpy(a,"b");
   return a; //returning address of a local variable - should not work.
}
char *test4(){
   char a[2];
   strcpy(a,"c");
   return a; //returning address of a local variable - should not work.
}
int main()
{
  int *b= test1();
  cout<<*b<<endl; //gives back garbage.
  char *c=test2();
  cout<<*c<<endl; //gives back garbage.
  char *d=test3();
  cout<<*d<<endl; //this works - why?
  char *e=test4();
  cout<<*e<<endl; //gives back garbage.
  return 0;
}
As far as my understanding goes regarding function calls and memory management this example program baffles me. If I understand things right, the reason why b=test1() and c=test2() don't work is because they are trying to return address of local variables that are wiped off once the stack memory pops the functions out. But then why is d=test3() working?
 
     
    