c++ - 声明一个 union 指针,里面有一个指针

标签 c++ malloc sse unions

<分区>

我正在努力学习 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;}
  1. 为什么会抛出该错误?
  2. 解决问题的最佳方法是什么?

最佳答案

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

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

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

关于c++ - 声明一个 union 指针,里面有一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663258/

相关文章:

c++ - 在 C++ 中使用变量的值作为下一个变量的名称

c++ - 编译对齐的结构在 GCC 中给出奇怪的警告

c++ - 如何从命令行启用 'std=c++0x'?

c++ - MicroBlaze 上 C++ 的线程安全

C:在c中分配的空闲内存

performance - 如何在 x64 CPU 上快速计算 sincos?

c++ - 控制转移绕过 :? 的初始化

c++ - 免费(指针)方法的性能?

c++ - SSE2 双倍乘法比标准乘法慢

将 SSE 代码转换为 AVX - _mm256_and_ps 的成本