2016-11-17 3 views
0

SSE命令を習得しようとしていますが、私は2つのマチスを掛けることを願っています。ポインタでユニオンポインタを宣言する

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. なぜそれがそのエラーを投げている:私は

    Access violation when typing in location

    でそれらの一つ、プログラムがクラッシュを初期化しようとすると、しかし、ここでエラーがスローコードがですか?

  2. 問題を解決する最善の方法は何ですか?
+0

この質問はどのようにSSE命令に関連していますか? – zx485

+0

@ zx485後で '_mm_mul_ps'と' _mm_hadd_ps'関数を使ってマチスを乗算します。しかし、ここでの主な問題はSSEとは関係がありません。 – blackout

+0

その組合のポイントは一体何ですか?どのようにして、後で '__m128'の値を保持するのかポインタを保持するのかをコードが決定しますか? '__m128 * vec'と書くのですか? –

答えて

5

これはunionとは関係ありません。あなたのループにタイプミスがあります

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

お知らせJが4未満であるので、これが無限ループするとき、私が、4未満ではありませんながらループループの内側のこと。

+0

心配はいりません!それはいくつかの難解な言語の端の場合を打つよりもずば抜けています。 :-) – templatetypedef

関連する問題