声明一个内部有指针的联合指针

Declaring a union pointer with a pointer inside

本文关键字:指针 内部 一个 声明      更新时间:2023-10-16

我正在努力学习SSE指令,我渴望将两个矩阵相乘。但是,当我尝试初始化它们中的一个时,程序崩溃并出现

输入location

时发生访问冲突
下面是抛出错误的代码:
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. 解决这个问题的最好方法是什么?

这与union s无关。你的循环中有打字错误:

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

注意,内部for循环在i小于4时循环,而当j小于4时循环不循环,所以这个循环是无限的。