CUDA использует указатель хоста (на ЦП) для указания на блок памяти устройства (на графическом процессоре).
Для этого он изменил указатель на вызов cudaMalloc. Позже память на GPU освобождается с помощью соответствующего вызова cudaFree.
Когда вы выделяете dev_grid, вы выделяете его с помощью процессора. Модификация указателя не позволила бы ЦПУ освободить память позже, используя free, delete или другой подобный механизм. Таким образом, CUDA, скорее всего, имеет встроенную проверку, чтобы предотвратить это, заставляя cudaMalloc работать только с текущими нулевыми указателями.