在iOS中,我有一个函数调用,它依赖于苹果加速框架的成员vgathr
int pix = image.size.height * image.size.width;
float * array = (float *)malloc(sizeof(float) * pix * 4);
float * colorPlane = (float *)malloc(sizeof(float) * pix);
float * y_r = (float *)malloc(sizeof(float) * pix)
int * malloc(sizeof(int) * pix)
vDSP_vgathr(colorPlane, (const vDSP_Length *)idx, 1, y_r, 1, (int)(rate*pix));我已经看到了这样的问题,它与我得到的错误、EXC_I386_GPFLT和64位系统以及非规范指针有关。我看到的解决方案 (和另一个)建议包括tgmath.h,但是当使用时(在编译成功的情况下),它什么也不做,而且我仍然得到了EXC_I386_GPFLT。
我尝试过许多其他可能的解决方案,包括类型转换、各种对象和不同的函数调用。我如何使这个函数调用与64位架构一起工作?
发布于 2014-03-23 01:55:28
vDSP_vgathr的文档说它被定义为
void vDSP_vgathr (
float *__vDSP_A,
vDSP_Length *__vDSP_B,
vDSP_Stride __vDSP_J,
float *__vDSP_C,
vDSP_Stride __vDSP_K,
vDSP_Length __vDSP_N
);您将一个int传递到该函数中,vDSP_Length被定义为unsigned long.,因此,传递一个未签名的long in:
unsigned long * idxSend = (unsigned long *)malloc(sizeof(unsigned long) * N);
for (i=0; i<N; i++) idxSend[i] = (unsigned long)idx[i];
vDSP_vgathr(..., idxSend, ...);这解决了你的问题。
https://stackoverflow.com/questions/22543428
复制相似问题