函数返回值基础有关问题请问

函数返回值基础问题请教
函数返回时是将返回值拷贝到某个寄存器中,实际上返回的是拷贝的值而不是原来的值。不知道我这样理解正确吗?
那么如下的函数有什么问题呢?
  int   fun()
{
int   *p=new   int(5);
return   *p;
}
int   main()
{
      int   a=fun();
      return   0;
}
我的理解是将*p的值(也就是5)拷贝到寄存器中,然后将5返回;可是在程序运行时有错,除了内存泄露外还有哪些错误呢?感觉我对程序返回的原理不甚明了。望大家指教!!


------解决方案--------------------
嗯 这个很简单, 就是你new了一个东西 没有delete
而且你在一个函数内new出来, 函数外使用, 有没有全局变量或者别的什么东西保存变量的地址, 是有很大的问题的

改成这样,稍微好些:

int* fun()
{
int *p=new int(5);
return p;
}
int main()
{
int* a=fun();
printf( "%d ", *a);
delete a;
return 0;
}