C++动态二维数组:从txt读取数据 其后返回指针 再输出

C++动态二维数组:从txt读取数据 然后返回指针 再输出
我是想先从txt文档中  读取数据    利用指针返回   再在主函数中输出    
编译时 11.exe - 0 error(s), 0 warning(s)  也没有错误啊   
但是程序会自动崩溃
不知如何是好 
各位大神看看代码
哪个地方有错误啊
谢谢啦

#include "stdio.h" 
#include<windows.h>
#include "iostream.h" 
#include "string.h" 
#include "stdlib.h" 
#define N 10000 
int  i,j;
float **num;
float** zb() 
{
FILE *f; 
int Index[N],i=0,j; 
char str[100],*pNext; 
f=fopen("C:\\22.txt","r");//打开文件 
if(f==NULL) {cout<<"Error, file don't open!"<<endl; return 0;}//如果文件没有打开就退出报错 
while(!feof(f))//检测是否读到了文件结尾 

float **num=new float *[840];
for(int i=0;i<840;i++)
{
num[i]=new float [3];
fgets(str,10000,f);//以文本形式从文件中读出一行 
Index[i]=atoi(str);//将类别标识转换为整型数,赋值 
pNext=str; 
for(j=0;j<3;j++) 

pNext=strchr(pNext+1,',');//搜索数据间的分隔符 
num[i][j]=atof(pNext+1);//将类别标识转换为浮点型数,赋值 

                         }

}



fclose(f);//关闭文件。 
return num;
}

void main()
{
float pp[840][3];
float**p;
p=num;
zb();
for (i=0;i<840;i++)
{
for (int j = 0; j <3; j++)
{
pp[i][j]=*(*(p+i)+j);
cout<<pp[i][j];
Sleep(1000);
}

}

for(i=0;i<840;i++)
delete[]num[i];
delete[]num;
}

------解决方案--------------------
全局变量num一直是野指针,未分配内存。函数float** zb() 里被分配内存的float **num=new float *[840];是局部变量,但返回的是全局变量num。最后delete释放内存的时候,全局变量num还是野指针。