从简单的arrayfire构造函数中获取seg错误

Getting seg fault from Simple arrayfire constructor

本文关键字:获取 seg 错误 构造函数 简单 arrayfire      更新时间:2023-10-16

我得到一个分段错误,从调用一个简单的arrayfire构造函数。

#include <arrayfire.h>
int main(){
    af_array a;
    int N  = 10;
    dim_t dims = 10;
    af_randu(&a, N, &dims, f32);
    af::array b(a);
    return 0;
}

af_randu是ArrayFire中的C-API函数。理想情况下,用户不需要直接调用这些函数。

你需要调用的是af::randu()。所以你对randu的调用应该是:
af:array b = af::randu(N, f32);

下面只是为了回答这个问题,af_randu的C-API是

AFAPI af_err af_randu(af_array *out,
                      const unsigned ndims,
                      const dim_t *const dims,
                      const af_dtype type 
)

所以第二个参数是ndims(维数),在您的例子中是1。因此你对af_randu的调用是:

af_randu(&a, 1, &dims, f32);

如果你在做一个矩阵比如说10x10,那么你会做

dim_t dims[] = {10, 10}
af_randu(&a, 2, dims, f32);

全面披露:我是ArrayFire的开发人员。