声明一个联合指针,里面有一个指针
Declaring a union pointer with a pointer inside
我正在努力学习 SSE 指令,我渴望将两个矩阵相乘。但是,当我尝试初始化其中之一时,程序崩溃并显示
Access violation when typing in 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;}
- 为什么会抛出该错误?
- 解决问题的最佳方法是什么?
这与union
无关。您的循环中有拼写错误:
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时循环,所以这个循环无限。
我正在努力学习 SSE 指令,我渴望将两个矩阵相乘。但是,当我尝试初始化其中之一时,程序崩溃并显示
Access violation when typing in 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;}
- 为什么会抛出该错误?
- 解决问题的最佳方法是什么?
这与union
无关。您的循环中有拼写错误:
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时循环,所以这个循环无限。