我一直在尝试以程序方式生成arrayfire数组的数组。过去与其他对象打交道时,我可以这样做:
className * listName = (className*)malloc(numOfObjects*sizeOf(className))
或
className ** listName = (className**)malloc(numOfObjects*sizeOf(className*))
,然后使用for循环分配列表中的所有内容,并在完成后将其删除。
但是,这不适用于arrayfire。我试图做
af::array *Kernels;
Kernels = (af::array*)malloc(Count*sizeof(af::array));
for(int i = 0; i < Count; i++) {
Kernels[i] = af::range(i);
}
我稍后致电:
free Kernels
此代码可以编译,但是在运行时会崩溃。这是我崩溃时得到的:
引发'af :: exception'实例后调用终止what():ArrayFire异常(函数不支持此数据类型:204):在函数af_err中af_release_array(af_array)在文件src / api / c / array.cpp:194中参数0的类型无效
在函数af :: array&af :: array :: operator =(const af :: array&)在文件src / api / cpp / array.cpp:771中中止(核心已弃用)
我正在寻找正确的语法来完成我想做的事情,或者寻找另一种方法。我已经在Google周围搜索了很多,但是没有找到我想要的东西。
谢谢。
所以看来我终于得到了解决。似乎使用这种方式:std::vector<af::array> Kernels;
为我提供了我想要的所有功能。事实证明,具有双指针可以编译,但是arrayfire中的函数并未构建为处理af :: array *对象指针。