Can somebody please tell me the problem with this implementation of cudaMemcpy and cudaMalloc?

[codebox]wchar_t *a=L"whats up?";

wchar_t *b=L"Ananth";

wchar_t *ab[2];//Standard arrary of pointers

ab[0]=a;

ab[1]=b;

wchar_t *dev_ab[2];

wchar_t *home[2];

cudaMalloc((void**)&dev_ab,2*(sizeof(wchar_t*)));

//Copying to device

cudaMemcpy(dev_ab,ab,2*(sizeof(wchar_t*)),cudaMemcpyHostToDe

vice);

//Copying back to host

cudaMemcpy(home,dev_ab,2*(sizeof(wchar_t*)),cudaMemcpyDevice

ToHost);

[/codebox]

I get an error saying Invalid argument after the cudaMemcpy…am i doing sumthing wrong or can i not send send arrays of pointers to the device??? Pllzzzzzzz help…