我有一个简单的问题,我似乎无法在网上找到.
我正在使用CUDA做一些GPU工作,我需要在GPU上分配一些数据.cudaMalloc函数如下:
cudaMalloc(void** identifier, size_t space);
Run Code Online (Sandbox Code Playgroud)
很容易.所以,让我们分配一个整数.
int i = 5;
cudaMalloc((void**)&(&i), sizeof(int));
Run Code Online (Sandbox Code Playgroud)
但是这个错误("表达式必须是左值或函数指示符").明显的解决方法是声明i为开头的指针,然后获取它的地址,并且完全正常; 我只是讨厌变通办法.
我觉得这个问题应该有一个明显的答案-毕竟**,***即使**********在C.工作得很好,所以,我怎么得到一个变量的地址的地址"干净"?
谢谢!
这不是一种解决方法; 这是正确的方法.
该函数需要指针的地址int,因为它将指针指向int它刚刚分配的指针.因此,您需要一个真实的分配指针的地址.像"&& i"这样的表达式要求编译器为你提供i的地址 - 这是一个纯数字,没有存储位置 - 然后给你一个指向该值的指针,当然它不能这样做.
所以你想说
int *p;
cudaMalloc((void**)&p, sizeof(int));
Run Code Online (Sandbox Code Playgroud)
现在*p是int已分配.