在非主函数中new出来的动态数组如何在主函数中delete

在非主函数中new出来的动态数组怎么在主函数中delete?
我听说将这个指针声明成全局指针就可以了,问题是我怎么声明成全局指针?

#include <iostream>
using namespace std;
struct s//true
{ int ID; double S1,S2,S3,Avg; char name[15];};
int num;
void input()//ture

cin>>num; 
s *p_s = new s[num];
for(int i=0;i!=num;i++)
cin>>p_s[i].ID>>p_s[i].S1>>p_s[i].S2>>p_s[i].S3>>p_s[i].name;
}
int main ()

//尝试定义成全局指针 
s *p_s=NULL; 
//假设input函数没有问题 
input(); 
delete []p_s;
}

按照我的思路我应该怎么修改 才能在 main函数中delete那个结构数组?

------解决思路----------------------

#include <iostream>
using namespace std;
struct s//true
{   
int ID;    
double S1,S2,S3,Avg;    
char name[15];
};
int num;
s * input()//ture

cin>>num; 
s *p_s = new s[num];
for(int i=0;i!=num;i++)
cin>>p_s[i].ID>>p_s[i].S1>>p_s[i].S2>>p_s[i].S3>>p_s[i].name;
return p_s;
}
int main ()

s *p_s=NULL; 
p_s =input(); 
delete []p_s;
}

------解决思路----------------------

#include <iostream>
using namespace std;
struct s//true
{    int ID;    double S1,S2,S3,Avg;    char name[15];};
int num;
s *p_s=NULL; //全局指针
void input()//ture

cin>>num; 
p_s = new s[num];
for(int i=0;i!=num;i++)
cin>>p_s[i].ID>>p_s[i].S1>>p_s[i].S2>>p_s[i].S3>>p_s[i].name;
}
int main ()

//尝试定义成全局指针 
//s *p_s=NULL; 
//假设input函数没有问题 
input(); 
delete []p_s;
}

------解决思路----------------------


//或者这样
void input(s *&p_s)

cin>>num; 
p_s = new s[num];
for(int i=0;i!=num;i++)
cin>>p_s[i].ID>>p_s[i].S1>>p_s[i].S2>>p_s[i].S3>>p_s[i].name;
}
int main ()

s *p_s=NULL; 
input(p_s); 
delete []p_s;
}


------解决思路----------------------
delete只能delete自己区域内部所new的内存,如果你想跨区域去delete的话,那么就需要用函数来跳转在两个区域之间,那么就会有参数和返回值,那么返回值一般当做一个函数的值,我的想法一般不改动返回值,因为返回值代表了一个函数的含义,比如input返回了一个指针,这有点唐突可读性稍差,一般就是void或者bool,那么就可以用传参数的引用来进行delete那部分区域,但是呢,你这代码中的input我感觉还是写的不太好,你就是想模块化这个输入的部分,这是属于c语言的部分,c语言的模块化就在于数据和方法之间的关系不像c++类中的关系那样密切,那么既然是所谓的一个输入部分的变量也行,我认为把num声明在main里面也可,而且那个结构体数组同样也可以声明在main里面,毕竟这种形式看得比较多,然后用input(int&, s*&)来传递参数进去就ok了