子函数返回值的有关问题

子函数返回值的问题?
#include   "stdio.h "
#include   "conio.h "

int   *max(void)

{

    int   fu[6];
    int   x,y,z,t;
    x=0;
    y=0;
    z=0;
    t=0;
    printf( "input   x: ");          
    scanf( "%d ",&x);
    printf( "input   y: ");
    scanf( "%d ",&y);
    printf( "input   z: ");
    scanf( "%d ",&z);
    if   (x> y)
        {t=x;x=y;y=t;}   /*交换x,y的值*/
    if(x> z)
        {t=z;z=x;x=t;}   /*交换x,z的值*/
    if(y> z)
        {t=y;y=z;z=t;}   /*交换z,y的值*/
    fu[0]=x;
    fu[1]=y;
    fu[2]=z;

    return   fu[2];

}

int   main(void)

{

      int   *p=NULL;
      p=max();
      printf( "small   to   big:%u\n ",*p);
      getch();
      return   0;

};


为什么max   返回的值不正确呢?   我想返回3个值就是从小到大排序的数值,我定义了数组,哪不对吗?

------解决方案--------------------
你定义的数组fu[6]是局部变量,max()函数调用结束fu[6]会被自动释放。所以你在主函数中通过p得到max()的返回值是野指针。要返回正确值,可以通过将fu[6]设置为静态:static int fu[6];;也可以动态申请内存:int *fu = new int[6];,然后在主函数中释放:delete[] p;。

另外,你的max()函数返回的数据类型明显不正确。是否应该为:return &fu[2];?