cudaMallocArray error "expression must be a pointer to a complete object type"

I would like to alloc an cudaArray with float4, so I use cudaMallocArray to alloc the cudaArray, and it’s ok, but when I use this float4 array, the compiler told me “error: expression must be a pointer to a complete object type”

the code is like this:

[codebox]

     cudaChannelFormatDesc channelDescFloat4 = cudaCreateChannelDesc<float4>();

     cudaArray* location;

     cudaMallocArray( &location, &channelDescFloat4, width, height );

     location[1].x += 1.0f;  //this line raise up error[/codebox]

besides, I want to know how to initialize the array with float4 var such as

[codebox]float4 init=make_float4(1.0f,2.0f,3.0f,4.0f);

cudaMemset(location,init, width*height);[/codebox]

is this ok?