1bit转化为32bitbmp 遇到有关问题

1bit转化为32bitbmp 遇到问题
如题,运行显示内存不可为written,对应的是*(INT32U*)(data+(k++)*4+(8*x+y*w)*4)=*(color+((p&128)>>7)); 这一句,for循环运行一次之后,就不运行了。菜鸟看不懂,急求解答~
INT8U *change1bit(INT8U *datax,INT32U *color)
{
INT8U *data;
INT8U p;
int x,y,i,k,a;
data=(INT8U*)malloc(pixel*4);
a=(32-w%32)%32;

for(y=0;y<h;y++)
for(x=0;x<(w+a)/8;x++)
{ k=0;
p=*(datax++);
for(i=0;i<8;i++)
{
*(INT32U*)(data+(k++)*4+(8*x+y*w)*4)=*(color+((p&128)>>7));

p<<=1;
}
}
return data;
}

------解决方案--------------------
到了今天你已经完美解决了吧 甚感欣慰