声明一个带有指针的联合指针

时间:2016-11-17 19:19:09

标签: c++ malloc sse unions

我正在尝试学习SSE指令,我渴望增加两个方面。但是,当我尝试初始化其中一个时,程序崩溃了

  输入位置时

访问冲突

以下是抛出错误的代码:

typedef union{
    __m128 vec;
    float* afloat;
}u_float;

int main(){

__declspec(align(16)) u_float *mat1;

mat1 = (u_float*)malloc(sizeof(u_float)*4);
for(int i = 0; i < 4; i++)
    mat1[i].afloat = (float*)malloc(sizeof(float)*4);

for(int i = 0; i < 4; i++)
    for(int j = 0; i < 4; j++)
            mat1[i].afloat[j] = 1; // Error.

return 0;}
  1. 为什么会抛出这个错误?
  2. 这是解决问题的最佳方法吗?

1 个答案:

答案 0 :(得分:5)

这与for(int i = 0; i < 4; i++) for(int j = 0; i < 4; j++) // <-- Here mat1[i].afloat[j] = 1; 无关。你的循环中有拼写错误:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    Uri contentUri = FileProvider.getUriForFile(getContext(), "com.your.package.fileProvider", newFile);
    intent.setDataAndType(contentUri, type);
}

请注意,当 i 小于4时,内部for循环循环,而 j 小于4时,因此无限循环。