title: cudaMemcpy fails to copy values
body: <p>I am calling cudaMemcpy and the copy returns successfully however the source values are not being copied to the destination. I wrote a similar piece using memcpy() and that works fine. What am I missing here?</p>
  
  <pre><code>// host externs
  extern unsigned char landmask[DIMX * DIMY];
  
  // use device constant memory for landmask
  unsigned char *tempmask;
  __device__ unsigned char *landmask_d;
  </code></pre>
  
  <p>..</p>
  
  <pre><code>void checkCUDAError(const char* msg) {
  cudaError_t err = cudaGetLastError();
    if (cudaSuccess != err) {
      fprintf(stderr, "Cuda error: %s: %s.\n", msg, cudaGetErrorString(err));
      exit(EXIT_FAILURE);
    }
  }
  
  ..
  
  // try a memcpy
  size_t landMemSize_t landMemSize = DIMX * DIMY * sizeof(char);
  tempmask = (unsigned char*)malloc(landMemSize);
  memcpy(tempmask, landmask, DIMX * DIMY);
  if (landmask[0] != *tempmask) printf("FAILURE!\n");
  
  // allocate device memory for landmask
  cudaMalloc((void **)&amp;landmask_d, landMemSize);
  printf("allocating %ld Kbytes for landmask\n", landMemSize/1024);
  checkCUDAError("memory allocation");
  
  // copy landmask from host to device
  cudaMemcpy(landmask_d, landmask, landMemSize, cudaMemcpyHostToDevice);
  checkCUDAError("memory copy");
  if (landmask[0] != *landmask_d) printf("FAILURE!\n");
  </code></pre>
  
  <p>None of the CUDAErrors report any problem yet the second FAILURE is called..?</p>