指针可能不指向java openCL的null对象

时间:2016-06-22 12:36:53

标签: java pointers opencl jocl

我正在使用一个内核,它将一个图像作为java和JOCL的参数

df.limit(Int.MaxValue)
  .write
  .options(Map(HBaseTableCatalog.tableCatalog -> cat_matrice))
  .format("org.apache.spark.sql.execution.datasources.hbase")
  .save()

编译时,我收到错误:

  

指针可能不指向空对象

这是在行:

input ="12.jpg";
image = createBufferedImage(input);
image = createBufferedImage(input);
DataBufferInt dataBufferSrc = (DataBufferInt)image.getRaster().getDataBuffer();
int dataSrc[] = dataBufferSrc.getData();
inputImageMem = clCreateBuffer(context, CL_MEM_READ_ONLY| CL_MEM_USE_HOST_PTR,
            dataSrc.length * Sizeof.cl_uint, Pointer.to(dataSrc), null);
clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem));

可能的问题是什么?我该如何解决?

PS:clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem)); 是取自JOCL样本的函数 http://jocl.org/

1 个答案:

答案 0 :(得分:1)

来自openCL clCreateBuffer documentation

  

如果成功创建缓冲区对象,则返回有效的非零缓冲区对象,并将errcode_ret设置为CL_SUCCESS。 否则,它返回一个NULL值,并在errcode_ret中返回以下错误值之一......

clCreateBuffer函数的最后一个参数是一个int指针(您希望返回错误代码)。您目前将其设置为null。我的猜测是clCreateBuffer失败了。我建议您检查errcode_ret的值,它会包含一个错误代码,可以帮助您解决问题。