一个c++指针的问题,要求编写一个函数

有这样一个题,要求编写一个函数,以char指针数组和数组中的指针数量作为参数,返回最长字符串的地址。我想请问这个函数的返回值的类型是什么呢?也就是说在声明函数时函数类型应该是
char *** 还是其他呢?因为我认为 **char *** 指的是返回一个指向单个字符的指针而不是指向字符串的指针,而且这个函数怎么编写呢?以下是我写的源代码,虽然通过了编译,但是在运行时崩溃了
** **char
* maxn( char *** arr[],int len)
{
**char
**max;*
max=arr[0];
for(int i=1;i max=(strlen(max)>strlen(arr[i]))?max:arr[i];
return max;
}**
还有,在请求动态分配一个指向字符串的指针数组时,应该是
(char *) * pt = new (char *) [len]

还是
(char) * pt = new char [len]
呢,小弟是新手,各位高手勿喷啊

返回char*,下面那个是正确的内存分配

char* maxn(char** array, int size) {
    max=arr[0];
    for(int i=1;i max=(strlen(max)>strlen(arr[i]))?max:arr[i];
     return max;}
} 

new 的时候:
(char *) * pt = new (char *) [len]
这个正确。
还需要
pt[i]= new char[n];
来new数组元素。