第二个cudaMalloc之后的分段错误

zap*_*hod 0 c cuda

我在第二个cudaMalloc之后获得了一个分段错误.

#include <cuda.h>
#include <cuda_runtime.h>

int main(){

  int n=16;

  float2* a;
  cudaMalloc((void **) a, n*sizeof(float2));
  float2* b;
  cudaMalloc((void **) b, n*sizeof(float2));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉2个cudaMalloc中的任何一个,那么代码运行正常.

谢谢!

Ctx*_*Ctx 6

你必须像这样传递指针指针:

float2* a;
cudaMalloc(&a, n*sizeof(float2));
float2* b;
cudaMalloc(&b, n*sizeof(float2));
Run Code Online (Sandbox Code Playgroud)

否则,你只是将一个悬空指针强制转换为"指向指针的指针",并且该库取消引用导致段错误的垃圾地址.