title: CUDA - Copy device data to host?
body: <p>I have device variable and in this variable, I allocate and fill an array in the device, but I have a problem to get data to host. <code>cudaMemcpy()</code> return <code>cudaErrorInvalidValue</code> error. how can I do it?</p>
  
  <p>PS: The Code is just example, I know, that In this particular case I can use <code>cudaMalloc</code> because I know the size of the array, but In my REAL code, It computes the size of the array in the device and it needs immediately allocate memory. </p>
  
  <p>PS2: I found a similar problem, but I still don't know, how can I solve it? - <a href="https://stackoverflow.com/questions/8322547/copy-data-which-is-allocated-in-device-from-device-to-host">copy data which is allocated in device from device to host</a></p>
  
  <p>PS3: I have updated code, but still doesn't work:{</p>
  
  <p>PS4: I am just trying to run this code on a notebook with Nvidia GT 520MX(latest game driver) and doesn't work too :(</p>
  
  <p>thx</p>
  
  <pre><code>#include &lt;cuda.h&gt;
  #include &lt;stdio.h&gt;
  
  #define N 400
  __device__ int* d_array;
  
  __global__ void allocDeviceMemory()
  {
      d_array = new int[N];
      for(int i=0; i &lt; N; i++)
           d_array[i] = 123;
  }
  
  int main()
  {
      allocDeviceMemory&lt;&lt;&lt;1, 1&gt;&gt;&gt;();
  
      cudaDeviceSynchronize();
  
      int* d_a = NULL;
      cudaMemcpyFromSymbol((void**)&amp;d_a, "d_array", sizeof(d_a), 0, cudaMemcpyDeviceToHost);
      printf("gpu adress: %lld\n", d_a);
  
  
      int* h_array = (int*)malloc(N*sizeof(int));
      cudaError_t errr = cudaMemcpy(h_array, d_a, N*sizeof(int), cudaMemcpyDeviceToHost);
      printf("h_array: %d, %d\n", h_array[0], errr);
  
      getchar();
      return 0;
  }
  </code></pre>