arrayfire, указатели и c ++ - PullRequest
       32

arrayfire, указатели и c ++

0 голосов
/ 05 января 2020

Я пытался процедурно сгенерировать массив массивов массива. Имея дело с другими объектами в прошлом, я мог либо что-то вроде:

className * listName = (className*)malloc(numOfObjects*sizeOf(className))

или

className ** listName = (className**)malloc(numOfObjects*sizeOf(className*))

, а затем использовать для l oop, чтобы выделить каждую из вещей в списки и удалить их, когда я закончу с ними.

Однако это не работает с 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

Этот код компилируется, но при запуске его взломает sh. Вот что я получаю, когда происходит сбой:

завершается вызовом после выброса экземпляра 'af :: exception' what (): ArrayFire Exception (функция не поддерживает этот тип данных: 204): In функция 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 Прервано (сброшено ядро)

Я ищу правильный синтаксис, чтобы делать то, что пытаюсь сделать, или альтернатива. Я немного погуглил и не нашел то, что искал.

Спасибо.

1 Ответ

0 голосов
/ 05 января 2020

Так что, похоже, я наконец-то нашел решение. Кажется, что с помощью этого: std::vector<af::array> Kernels; получает мне все функции, которые я хочу. Оказывается, наличие двойного указателя будет компилироваться, но функции в arrayfire не созданы для работы с указателями объектов af :: array *.

...