error C2106: '=' : left operand must be l-value左值有关问题

error C2106: '=' : left operand must be l-value左值问题
这里有一小段代码,总是显示M[i][0]到M[i][5]不是左值,这是什么问题,XX[i],YY[i]都有定义
C/C++ code

    M=(int *)malloc(t*6*sizeof(int));
            for(i=0;i<t;i++)
            {
                M[i][0]=XX[i]*XX[i];
                M[i][1]=XX[i]*YY[i];
                M[i][2]=YY[i]*YY[i];
                M[i][3]=XX[i];
                M[i][4]=YY[i];
                M[i][5]=1;
            }


以上6行每行都会有不是左值的错误,还有error C2109: subscript requires array or pointer type,这又是什么意思。
之前我用的这个代码定义M就没有以上的错误,有什么区别啊
C/C++ code

M=(double **)malloc(t*sizeof(double *));
            if (NULL==M) 
                return;
            for (i=0;i<t;i++) 
            {
                M[i]=(double *)malloc(6*sizeof(double));
                if (NULL==M[i]) 
                    return;
            }




------解决方案--------------------
因为你第一个是一级指针。那么意味着 M[i]的类型是一个整形 int 在这个整形上面再取下标 不知道你要表达什么意思了。
------解决方案--------------------
请看这两句的区别:
M=(int *)malloc(t*6*sizeof(int));
M=(double **)malloc(t*sizeof(double *));