这段小程序 运行时在第13行 *pszArray[p]=(char*)malloc(i+1); 报错,请诸位大侠给指正,有什么好的方法吗

这段小程序 运行时在第13行 *pszArray[p]=(char*)malloc(i+1); 报错,请各位大侠给指正,有什么好的方法吗?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Split(const char *pszString, char ***pszArray, long *pnCount)
{
        int p=0;
        int i=0;
        for(;*pszString!=0;pszString++)
        {
                i++;
                if(*pszString==';')
                {
                        *pszArray[p]=(char*)malloc(i+1);
                        strncpy(*pszArray[p++],pszString-i,i);
                        i=0;
                }
        }
        for(i=0;i<p;i++)
        {
                printf("%s\r\n",*pszArray[i]);
        }
}
int main(int argc,char **argv)
{
        int Count;
        long *pnCount;
        char *pszString,**splitbuffer[32];
        pszString=(char*)malloc(32);
        memset(pszString,0,32);
        pszString=";abc;def;ghi;jk;";
        Split(pszString,splitbuffer,pnCount);
        return 0;
}
malloc

------解决方案--------------------
 *pszArray[p] is not a pointer, you should have a:
 char** pszarray;
pszarray[p] = malloc(...); 
------解决方案--------------------


引用:
Quote: 引用:

 *pszArray[p] is not a pointer, you should have a:
 char** pszarray;
pszarray[p] = malloc(...); 


现在按照二楼的修改为  (*pszArray)[p]=(char*)malloc(i+1); 但是仍然报错,执行的时候包内存错误。


确定是按照2L的方法改的?
    p=(int **)malloc(4*sizeof(int *));